Actualmente estoy tratando de usar HandlerExceptionResolver
para el manejo de excepciones en un proyecto Spring MVC.Spring MVC manejo de excepciones con HandlerExceptionResolver
Quiero manejar excepciones normales a través de resolveException
, así como de 404 a través de handleNoSuchRequestHandlingMethod
.
Dependiendo del tipo de solicitud JSON o text/html, la respuesta de excepción debe devolverse adecuadamente.
resolveException
funciona ahora.
Pero handleNoSuchRequestHandlingMethod
me está dando dolor de cabeza. ¡Nunca se llama!
De acuerdo con la docu el método debe ser llamado en 404 errores
¿Qué estoy haciendo mal ...
Esto es lo que tengo hasta ahora.
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;
}
}
EDITAR 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;
}
}
El código anterior aún no tiene ningún efecto.
¿Alguna otra idea?
He actualizado mi código. ¿Lo dijiste así? –
También lo probé con la herencia de '' DefaultHandlerExceptionResolver'', pero en el caso de un 404, '' doResolveException'' nunca se llama ... ¿te entendí mal? –