SpringBoot异常处理自动配置原理

ErrorMvcAutoConfiguration 自动配置异常处理规则

    • 给容器中放了这个组件:类型:DefaultErrorAttributes ->** **id:errorAttributes
      public class DefaultErrorAttributes implements ErrorAttributes, HandlerExceptionResolver
      DefaultErrorAttributes:定义错误页面中可以包含哪些数据。
      SpringBoot异常处理自动配置原理_第1张图片
      SpringBoot异常处理自动配置原理_第2张图片
      SpringBoot异常处理自动配置原理_第3张图片

    • 给容器中放这个组件:类型:BasicErrorController --> id:basicErrorController(作用:json+白页 适配响应)
      • 处理默认 /error 路径的请求;如果是响应页面,就响应new ModelAndView("error", model)】error页面。否则响应ResponseEntity,把map里面的所有数据响应出去,相当于json数据。
        SpringBoot异常处理自动配置原理_第4张图片
        容器中有组件 View->id是error;(这个view是响应默认错误页)
        容器中放组件 BeanNameViewResolver(视图解析器);按照返回的视图名error作为组件的id去容器中找View对象defaultErrorView。
        (springboot给容器中添了BasicErrorController组件,只要请求是发到error路径,默认就会去找error视图,而error视图又是容器中的一个view组件,那是怎么找到error视图的呢?就是用BeanNameViewResolver视图解析器根据组件的id(error)找到的,最终根据返回值error作为视图名,这个名作为id找到view对象。相当于view最终渲染成什么样就是什么样)
        SpringBoot异常处理自动配置原理_第5张图片
        点进(StaticView)defaultErrorView对象,发现里面有一个render方法,这个方法响应一个默认错误页,相当于容器的组件 View->id是error它响应的是错误页,默认是一个白页。
        SpringBoot异常处理自动配置原理_第6张图片
        小结:如果想要返回页面;就会找error视图【StaticView】。(默认是一个白页,因为已经写死了)。为啥BasicErrorController 他既能响应html页面又能响应json,因为它里面有两个处理方法
        SpringBoot异常处理自动配置原理_第7张图片
        想要自定义错误页的话,可以自定义一个视图,这个视图名叫error就行。

    • 给容器中放这个组件:类型:DefaultErrorViewResolver -> id:conventionErrorViewResolver
      • 如果发生错误,会以HTTP的状态码 作为 视图页地址(viewName),找到真正的页面
      • error/404、5xx.html
        SpringBoot异常处理自动配置原理_第8张图片
        SpringBoot异常处理自动配置原理_第9张图片

总结:

如果觉得返回的信息不够,可以自定义DefaultErrorAttributes。
如果不想让他响应默认错误页或json,可以自定义BasicErrorController 。
如果不想把错误页面放在error文件夹下,可以自定义DefaultErrorViewResolver 

你可能感兴趣的