2010-05-20 13 views
8

Ich habe eine Methode in meinem Controller, die die Ausnahmen behandelt, die von der Anwendung ausgelöst werden. Also habe ich eine Methode wie diese.@ExceptionHandler behandelt die geworfenen Ausnahmen nicht

@Controller 
public class ExceptionController { 

    @RequestMapping(value="/error") 
    @ExceptionHandler(value={Exception.class, NullPointerException.class}) 
    public String showError(Exception e, Model model){ 
     return "tiles:error"; 
    } 
} 

Und ich, um zu versuchen, ob es funktioniert ich eine Nullpointer in einem anderen Verfahren in anderen Verfahren Controller werfen:

boolean a = true; 
if(a){ 
    throw new NullPointerException(); 
} 

Nachdem die Ausnahme ausgelöst wird es in der JSP gedruckt wird, aber es funktioniert nicht gehe ich meine showError() Methode (ich habe dort einen Haltepunkt gesetzt und es tritt nie ein). Die showError() -Methode fängt die Ausnahme ab und zeigt je nach Ausnahmetyp verschiedene Fehlerseiten (obwohl sie jetzt immer die gleiche Fehlerseite anzeigt). Wenn ich auf die URL/Fehler gehe, zeigt es die Fehlerseite, so dass die Methode showError() OK ist.

Ich bin mit Frühling 3.

Was das Problem sein kann?

Danke.

+2

Wenn Sie Ausnahme Behandlung von den Controllern entkoppeln wollen, dann verwenden Sie stattdessen eine 'HandlerExceptionResolver': http://static.springsource.org/spring/docs/3.0. x/spring-framework-reference/html/mvc.html # d0e29470 – skaffman

Antwort

7

Wenn Sie Ihre Protokolle anschauen, werden Sie wahrscheinlich sehen:

java.lang.IllegalStateException: Nicht unterstützte Argument [org.springframework.ui.Model] für @ExceptionHandler Methode

Mit anderen Worten, @ExceptionHandler Methoden sind nicht erlaubt, einen Model Parameter zu deklarieren (siehe docs).

Entfernen Sie diesen Parameter (den Sie sowieso nicht verwenden), und es sollte wie erwartet funktionieren.

+0

Danke, es ist wahr, aber es löst das Problem nicht. Ich habe festgestellt, dass die Ausnahme nur aufgefangen wird, wenn sie von einer Methode ausgelöst wird, die sich im selben Controller befindet. Es kann sein, wegen dieses Fehlers: https://jira.springsource.org/browse/SPR-5959 – Javi

+1

@Javi: Das ist kein Fehler, ist es von Design und in der Dokumentation angegeben: http: // static.springsource. org/spring/docs/3.0.x/spring-framework-referenz/html/mvc.html # mvc-ann-exceptionhandler – skaffman

+0

Ich schaute auf die Doc-Seite, die Sie oben verlinkt haben, aber ich muss dicht sein, ich sehe nicht Alles, was besagt, dass Sie keinen Model-Parameter in die Methode aufnehmen können, können Sie darauf hinweisen? – chrismarx

Verwandte Themen