Attualmente sto cercando di utilizzare HandlerExceptionResolver
per la gestione delle eccezioni in un progetto Spring MVC.Spring MVC gestione delle eccezioni con HandlerExceptionResolver
Desidero gestire le normali eccezioni tramite resolveException
e 404 tramite handleNoSuchRequestHandlingMethod
.
A seconda del tipo di richiesta JSON o text/html, la risposta dell'eccezione deve essere restituita in modo appropriato.
resolveException
funziona ora.
Ma il handleNoSuchRequestHandlingMethod
mi sta facendo venire il mal di testa. Non è mai stato chiamato!
Secondo il docu il metodo dovrebbe essere chiamato il 404 errori
Che cosa sto facendo di sbagliato ...
Questo è quello che ho finora.
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;
}
}
EDIT con 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;
}
}
Il codice di cui sopra non ha ancora alcun effetto.
Altre idee?
ho aggiornato il mio codice. Intendevi in questo modo? –
L'ho provato anche ereditando da '' DefaultHandlerExceptionResolver'', ma in caso di un 404 il '' doResolveException'' non viene mai chiamato ... ti ho dimenticato? –