栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMvc 源码分析 (异常处理流程) (十三)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMvc 源码分析 (异常处理流程) (十三)

文章目录
      • 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方法

这个方法就是如果出现异常的话, 异常解析器进行处理异常。

  1. 先判断是否是@ExceptionHandler注解下的方法, 如果是的话另外处理 AbstractHandlerMethodExceptionResolver.doResolveException() -> ExceptionHandlerExceptionResolver.doResolveHandlerMethodException()
  2. 判断是否是@ResponseStatus注解下的方法 RespinseStatusExceptionResolver.doResolveException
  3. 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);
	}

  1. 获取到装填码
  2. 获取到出错理由
  3. 然后渲染异常的页面
  4. 返回空的ModelAndView

1.3DefaultHandlerExceptionResolver解析方法


这里比如handleMissingServletRequestParameter 这个 return


会跳转页面 + 返回空的ModelAndView

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020679.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号