springboot3错误处理机制源码分析

 ErrorMvcAutoConfiguration

在springboot启动时会自动装配默认的错误处理机制 ErrorMvcAutoConfiguration

springboot3错误处理机制源码分析_第1张图片

 springboot正在运行,此时发生了404的错误。(业务错误场景)分析底层处理流程。

springboot3错误处理机制源码分析_第2张图片

1.如果在对应的controller层中设置了对应的错误处理器,则错误直接在springmvc中被处理。(如果没有则执行2)

2. ErrorMvcAutoConfiguration中在ioc容器中配置了BasicErrorController,该类在springboot中处理错误。

直接中途中的路径。(没有在手动配置的话,就使用默认的/error)

springboot3错误处理机制源码分析_第3张图片

 在BasicErrorController中处理错误有两种返回方式,分别是页面和JSON。这里我们直接研究返回页面的方法。

观察方法中的resolveErrorView方法。

springboot3错误处理机制源码分析_第4张图片

 就是使用默认的错误视图解析器处理错误视图。

springboot3错误处理机制源码分析_第5张图片

 其执行的方法。springboot3错误处理机制源码分析_第6张图片

 获取当前的状态码,执行resolve方法。(此时就是404)

springboot3错误处理机制源码分析_第7张图片

先状态码和路径进行拼接,在/template/error中查找是否存在404.html文件,找到了就直接对html页面进行渲染,如果没找到就执行  resolveResource 方法。

springboot3错误处理机制源码分析_第8张图片

springboot3错误处理机制源码分析_第9张图片 在对用状态资源中查找是否存在error目录且其中是否存在404.html。

 如果都没有找到的话,执行下面方法。

springboot3错误处理机制源码分析_第10张图片

springboot3错误处理机制源码分析_第11张图片 此时就会去找404的模糊码,这里就是对应的'4xx'。

以'4xx'作为参数,进入resolve方法 ,先进行路径拼接也就是/error/4xx.html,先在/template目录中查找是否存在,如果存在就直接返回,如果不存在就在状态资源中查找/error/4xx.html是否存在。(模糊码的存在和上述的具体状态码的步骤是相同的)

 3.如果还是没有找到,就返回error视图。

springboot3错误处理机制源码分析_第12张图片

在ErrorMvcAutoConfiguration的自动配置中在ioc容器中配置了error的默认视图。

StaticView是默认的视图内部类,该类中就是各种的默认的错误视图。

springboot3错误处理机制源码分析_第13张图片

springboot3错误处理机制源码分析_第14张图片 

 最终完成错误处理。

总结

 springboot3错误处理机制源码分析_第15张图片

你可能感兴趣的:(SpringBoot,Java,spring,boot,spring,java)