Obecnie próbuję użyć HandlerExceptionResolver
do obsługi wyjątków w projekcie Spring MVC.Obsługa wyjątków Spring MVC z HandlerExceptionResolver
Chcę obsługiwać normalne wyjątki za pośrednictwem resolveException
, a także 404 za pośrednictwem handleNoSuchRequestHandlingMethod
.
W zależności od typu żądania, JSON lub text/html, odpowiedź wyjątku powinna zostać zwrócona.
resolveException
działa teraz.
Ale handleNoSuchRequestHandlingMethod
daje mi ból głowy. Nigdy nie jest wywoływany!
Według doku metoda powinna być wywoływana 404 błędów
Co robię źle ...
To, co mam tak daleko.
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 z 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;
}
}
Powyższy kod nadal nie ma żadnego wpływu.
Jakieś inne pomysły?
zaktualizowałem mój kod. Miałeś to na myśli? –
Próbowałem także z dziedziczeniem z '' DefaultHandlerExceptionResolver'', ale w przypadku 404 '' doResolveException'' nigdy nie zostanie wywołany ... czy nie rozumiałem cię? –