文章目录
- 0.前记
- 1.processHandlerException方法
- 1.1`@ExceptionHandler`注解下的异常
- 1.2`@ResponseStatus`注解下的方法
- 1.3`DefaultHandlerExceptionResolver`解析方法
0.前记
根据之前的文章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

1.3DefaultHandlerExceptionResolver解析方法

这里比如handleMissingServletRequestParameter 这个 return


会跳转页面 + 返回空的ModelAndView
最后
以上就是舒心毛豆最近收集整理的关于SpringMvc 源码分析 (异常处理流程) (十三)的全部内容,更多相关SpringMvc内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复