Il SimpleMappingExceptionHandler è un'implementazione di classe Springs HandlerExceptionResolver, che, come ho accennato prima, Spring utilizza per gestire le eccezioni generate dal codice. Primavera ha una limitazione (se questo è quello che è) nel senso che carica solo una implementazione HandlerExceptionResolver in qualsiasi momento. L'implementazione di default è AnnotationMethodHandlerExceptionResolver come menzionato nei miei blog precedenti, che ti costringe a fare una scelta tra l'utilizzo a grana fine la gestione delle eccezioni come previsto dalla AnnotationMethodHandlerExceptionResolver e più grossolana gestione delle eccezioni grano fornito da SimpleMappingExceptionHandler. The Guy è al di primavera hanno fatto l'aggiunta di un SimpleMappingExceptionHandler per la vostra applicazione abbastanza semplice. Per dimostrare questo ho prima di tutto bisogno di un controller flakey che un'eccezione per noi. Il codice qui sotto, sollevato dal mio blog precedente, genera una IOException quando viene chiamato ...
01.
@ RequestMapping
(value =
"/ IOException"
, method = RequestMethod.GET)
02.
pubblico
throwAnIOException String (Locale locale, modello Model)
03.
throws
IOException {
04.
05.
logger.info (
"Questo genera un IOException"
);
06.
07.
boolean
ThrowException =
true
;
08.
09.
se
(ThrowException) {
10.
gettare
nuova
IOException (
"Questo è il mio IOException"
);
11.
}
12.
13.
ritorno
a "casa"
;
14.
}
... Ed è garantito per rompere un webapp1 Se avevate intenzione di mantenere le cose ultra-semplice, il passaggio finale sarebbe quello di aggiungere il seguente codice XML al file di configurazione di Spring:
01.
<
fagioli: fagioli
id
=
"exceptionResolver"
02.
class
=
"org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"
>
03.
<
fagioli: property
name
=
"exceptionMappings"
>
04.
<
fagioli: la mappa
>
05.
<
fagioli: ingresso
chiave
=
"java.io.IOException"
value
=
"io-eccezione"
/>
06.
<
fagioli: entrata
chiave
=
"java.lang.Exception"
value
=
"generic-errore"
/>
07.
</
i fagioli: mappa
>
08.
</
i fagioli: proprietà
>
09.
</
fagioli: fagiolo
>
L'XML sopra mostra una definizione molto familiare bean Spring. Il nome del fagiolo è "exceptionResolver", implementato dalla classe SimpleMappingExceptionResolver. Questa classe ha una proprietà mappa, che è la parte più interessante di questa definizione in quanto associa una classe di eccezione a nome di una vista. Nel campione sono la mappatura IOException ad una vista chiamata 'io-exception' e tutte le altre eccezioni a una vista denominata 'generic-error'. Si noti che SimpleMappingExceptionHandler segue le regole standard di Java gestione delle eccezioni, quindi quando dico " tutte le altre eccezioni degli voglio dire tutte le eccezioni ad eccezione IOException e le sue sottoclassi. Se è vero che avvolge su di esso per un'implementazione banale. Vorrei aggiungere che io preferisco di estendere SimpleMappingExceptionHandler modo che io possa aggiungere in termini di funzionalità aggiuntive, come la registrazione degli errori specifica applicazione:
01.
pubblico
class
SampleExceptionHandler
estende
SimpleMappingExceptionResolver {
02.
03.
private
static
finale
Logger logger = LoggerFactory.getLogger (SampleExceptionHandler.
classe
);
04.
05.
/ **
06.
* Entra l'eccezione.
07.
*
08.
* @ see
09.
* javax.servlet.http.HttpServletResponse, java.lang.Object,
10.
* java.lang.Exception)
11.
* /
12.
@ Override
13.
protetto
ModelAndView doResolveException (richiesta HttpServletRequest, la risposta HttpServletResponse, gestore di oggetti,
14.
Exception ex) {
15.
logger.error (
"A"
+ ex.getClass () getSimpleName () +.
"si è verificato nella domanda"
, ex);
16.
17.
tornare
Super
doResolveException (richiesta, risposta, gestore, ex).;
18.
}
19.
20.
}
Una volta che hai scritto il tuo gestore di eccezione, allora tutto ciò che dovete fare è modificare la primavera config in modo che sia raccolto da primavera, quando i carichi webapp:
01.
<-! Definizione (s) per il SimpleMappingExceptionResolver ->
02.
<
fagioli: fagioli
id
=
"exceptionResolver"
03.
class
=
"com.captaindebug.exceptions.SampleExceptionHandler"
>
04.
<
fagioli: property
name
=
"exceptionMappings"
>
05.
<
fagioli: mappa
>
06.
<
fagioli: voce
chiave
=
"java.io.IOException"
value
=
"io-eccezione"
/>
07.
<
fagioli: ingresso
chiave
=
"java.lang.Exception"
value
=
"generic-errore"
/>
08.
</
i fagioli: mappa
>
09.
</
i fagioli: proprietà
>
10.
</
fagioli: fagiolo
>
Nessun commento:
Posta un commento
Nota. Solo i membri di questo blog possono postare un commento.