- 0.前记
- 1.processHandlerException方法
- 1.1`@ExceptionHandler`注解下的异常
- 1.2`@ResponseStatus`注解下的方法
- 1.3`DefaultHandlerExceptionResolver`解析方法
根据之前的文章DispatcherServlet.doDisptcher()方法中的方法ha.handle返回ModelAndView处理的方法processDispatchResult
private void processDispatchResult(HttpServletRequest request, HttpServletResponse response,
@Nullable HandlerExecutionChain mappedHandler, @Nullable ModelAndView mv,
@Nullable Exception exception) throws Exception {
boolean errorView = false;
if (exception != null) {
if (exception instanceof ModelAndViewDefiningException) {
logger.debug("ModelAndViewDefiningException encountered", exception);
mv = ((ModelAndViewDefiningException) exception).getModelAndView();
}
else {
Object handler = (mappedHandler != null ? mappedHandler.getHandler() : null);
mv = processHandlerException(request, response, handler, exception);
errorView = (mv != null);
}
}
1.processHandlerException方法
这个方法就是如果出现异常的话, 异常解析器进行处理异常。
- 先判断是否是@ExceptionHandler注解下的方法, 如果是的话另外处理 AbstractHandlerMethodExceptionResolver.doResolveException() -> ExceptionHandlerExceptionResolver.doResolveHandlerMethodException()
- 判断是否是@ResponseStatus注解下的方法 RespinseStatusExceptionResolver.doResolveException
- DefaultHandlerExceptionResolver.doResolveException()
这里的HandlerExceptionResolver主要有3个实现类
1.1@ExceptionHandler注解下的异常AbstractHandlerMethodExceptionResolver.doResolveException()
1.2@ResponseStatus注解下的方法 protected ModelAndView resolveResponseStatus(ResponseStatus responseStatus, HttpServletRequest request,
HttpServletResponse response, @Nullable Object handler, Exception ex) throws Exception {
int statusCode = responseStatus.code().value();
String reason = responseStatus.reason();
return applyStatusAndReason(statusCode, reason, response);
}
- 获取到装填码
- 获取到出错理由
- 然后渲染异常的页面
- 返回空的ModelAndView
这里比如handleMissingServletRequestParameter 这个 return
会跳转页面 + 返回空的ModelAndView



