我目前正在嘗試使用HandlerExceptionResolver
來處理Spring MVC項目中的異常。使用HandlerExceptionResolver處理Spring MVC異常
我想通過resolveException
以及404的通過 handleNoSuchRequestHandlingMethod
處理正常例外。
根據請求類型JSON或text/html,應該適當地返回異常響應。
resolveException
現在工作。
但handleNoSuchRequestHandlingMethod
讓我頭疼。它從來沒有叫過!
按照實況方法應該叫上404錯誤
我在做什麼錯?
這是我到目前爲止所。
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與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;
}
}
上面的代碼仍然沒有效果。
還有其他想法嗎?
我更新了我的代碼。你的意思是這樣嗎? –
我也嘗試過從''DefaultHandlerExceptionResolver''繼承,但是在404的情況下''doResolveException''永遠不會被調用......我誤解了你嗎? –