ErrorMvcAutoConfiguration
在springboot启动时会自动装配默认的错误处理机制 ErrorMvcAutoConfiguration
springboot正在运行,此时发生了404的错误。(业务错误场景)分析底层处理流程。
1.如果在对应的controller层中设置了对应的错误处理器,则错误直接在springmvc中被处理。(如果没有则执行2)
2. ErrorMvcAutoConfiguration中在ioc容器中配置了BasicErrorController,该类在springboot中处理错误。
直接中途中的路径。(没有在手动配置的话,就使用默认的/error)
在BasicErrorController中处理错误有两种返回方式,分别是页面和JSON。这里我们直接研究返回页面的方法。
观察方法中的resolveErrorView方法。
就是使用默认的错误视图解析器处理错误视图。
其执行的方法。
获取当前的状态码,执行resolve方法。(此时就是404)
先状态码和路径进行拼接,在/template/error中查找是否存在404.html文件,找到了就直接对html页面进行渲染,如果没找到就执行 resolveResource 方法。
在对用状态资源中查找是否存在error目录且其中是否存在404.html。
如果都没有找到的话,执行下面方法。
此时就会去找404的模糊码,这里就是对应的'4xx'。
以'4xx'作为参数,进入resolve方法 ,先进行路径拼接也就是/error/4xx.html,先在/template目录中查找是否存在,如果存在就直接返回,如果不存在就在状态资源中查找/error/4xx.html是否存在。(模糊码的存在和上述的具体状态码的步骤是相同的)
3.如果还是没有找到,就返回error视图。
在ErrorMvcAutoConfiguration的自动配置中在ioc容器中配置了error的默认视图。
StaticView是默认的视图内部类,该类中就是各种的默认的错误视图。
最终完成错误处理。
总结