Spring MVC Ausnahmebehandlung mit HandlerExceptionResolver
Ich bin derzeit versuchen zu verwenden HandlerExceptionResolver
für die Ausnahmebehandlung in einer Spring-MVC-Projekt.
Möchte ich behandeln normalen Ausnahmen über resolveException
sowie 404 über
handleNoSuchRequestHandlingMethod
.
Je nach Art der Anfrage JSON oder text/html ist der Ausnahme-Antwort zurückgegeben werden soll entsprechend.
resolveException
funktioniert jetzt.
Aber handleNoSuchRequestHandlingMethod
verursacht mir Kopfschmerzen. Es ist nie genannt!
Laut der Doku die Methode aufgerufen werden soll 404-Fehler
Was mache ich falsch...
Dies ist, was ich habe, so weit.
public class JsonExceptionResolver implements HandlerExceptionResolver {
protected final Log logger = LogFactory.getLog(getClass());
public ModelAndView resolveException(HttpServletRequest request,
if (exception instanceof NoSuchRequestHandlingMethodException) {
return handleNoSuchRequestHandlingMethod((NoSuchRequestHandlingMethodException) exception, request, response, handler);
}
...
}
public ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex,
HttpServletRequest request,
HttpServletResponse response,
Object handler){
logger.info("Handle my exception!!!");
ModelAndView mav = new ModelAndView();
boolean isJSON = request.getHeader("Accept").equals("application/json");
if(isJSON){
...
}else{
..
}
return mav;
}
}
BEARBEITEN mit DefaultHandlerExceptionResolver:
public class MyExceptionResolver extends DefaultHandlerExceptionResolver {
protected final Log logger = LogFactory.getLog(getClass());
@Override
protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) {
logger.warn("An Exception has occured in the application", exception);
logger.info("exception thrown " + exception.getMessage() );
if (exception instanceof NoSuchRequestHandlingMethodException) {
return handleNoSuchRequestHandlingMethod((NoSuchRequestHandlingMethodException) exception, request, response, handler);
}
...
return mav;
}
public ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex,
HttpServletRequest request,
HttpServletResponse response,
Object handler){
logger.info("Handle my exception!!!");
ModelAndView mav = new ModelAndView();
boolean isJSON = request.getHeader("Accept").equals("application/json");
if(isJSON){
...
}else{
...
}
return mav;
}
}
Den obigen code hat immer noch keine Wirkung.
Irgendwelche anderen Ideen?
InformationsquelleAutor Jeremy S. | 2011-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut Jürgen Höller vom Frühling, es ist nicht möglich, mit dem
HandlerExceptionResolver
weil es funktioniert nur für sub-mapping-z.B.haben Sie ein controller zugeordnet
/account/**
- und access-eine Methode aus dem acount wo keine Abbildung vorhanden ist, wie/acount/notExists
als sollte es funktionieren.Öffnen werde ich eine JIRA - Verbesserung ticket für diese Funktionalität
EDIT:
JIRA ticket über dieses Problem
https://jira.springsource.org/browse/SPR-8837?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=72648#comment-72648
InformationsquelleAutor Jeremy S.
handleNoSuchRequestHandlingMethod
ist nicht Teil derHandlerExceptionResolver
interface, also nur die Deklaration einer Methode der name nichts zu tun. Es ist eine geschützte Methode, spezifisch fürDefaultHandlerExceptionResolver
, und ist aufgerufen, aus seinerresolveException
- Methode (die ist Teil des interface):Reproduzieren die gleiche Funktionalität, können Sie entweder Unterklasse
DefaultHandlerExceptionResolver
und überschreiben Sie die Methoden, die Sie benötigen, oder müssen Sie einen Fall in IhremresolveException
Methode, mit derNoSuchRequestHandlingMethodException
.Ich habe auch versucht es mit den Erben von
DefaultHandlerExceptionResolver
, aber im Falle eines 404-diedoResolveException
wird nie genannt... habe ich missunderstand Sie?InformationsquelleAutor skaffman