我是靠谱客的博主 舒心毛豆,最近开发中收集的这篇文章主要介绍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

最后

以上就是舒心毛豆为你收集整理的SpringMvc 源码分析 (异常处理流程) (十三)的全部内容,希望文章能够帮你解决SpringMvc 源码分析 (异常处理流程) (十三)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部