关于java:SpringBoot异常处理自动配置原理

2次阅读

共计 1243 个字符,预计需要花费 4 分钟才能阅读完成。

ErrorMvcAutoConfiguration 主动配置异样解决规定

    • 给容器中放了这个组件:类型:DefaultErrorAttributes ->** **id:errorAttributes
      public class DefaultErrorAttributes implements ErrorAttributes, HandlerExceptionResolver
      DefaultErrorAttributes:定义谬误页面中能够蕴含哪些数据。


    • 给容器中放这个组件:类型:BasicErrorController --> id:basicErrorController(作用:json+ 白页 适配响应)
      • 解决默认 /error 门路的申请;如果是响应页面,就响应 new ModelAndView(“error”, model)】error 页面。否则响应 ResponseEntity,把 map 外面的所有数据响应进来,相当于 json 数据。

        容器中有组件 View->id 是 error;(这个 view 是响应默认谬误页)
        容器中放组件 BeanNameViewResolver(视图解析器);依照返回的视图名 error 作为组件的 id 去容器中找 View 对象 defaultErrorView。
        (springboot 给容器中添了 BasicErrorController 组件,只有申请是发到 error 门路,默认就会去找 error 视图,而 error 视图又是容器中的一个 view 组件,那是怎么找到 error 视图的呢?就是用 BeanNameViewResolver 视图解析器依据组件的 id(error)找到的,最终依据返回值 error 作为视图名,这个名作为 id 找到 view 对象。相当于 view 最终渲染成什么样就是什么样)

        点进(StaticView)defaultErrorView 对象,发现外面有一个 render 办法,这个办法响应一个默认谬误页,相当于容器的组件 View->id 是 error 它响应的是谬误页,默认是一个白页。

        小结:如果想要返回页面;就会找 error 视图【StaticView】。(默认是一个白页,因为曾经写死了)。为啥 BasicErrorController 他既能响应 html 页面又能响应 json,因为它外面有两个解决办法

        想要自定义谬误页的话,能够自定义一个视图,这个视图名叫 error 就行。


    • 给容器中放这个组件:类型:DefaultErrorViewResolver -> id:conventionErrorViewResolver
      • 如果产生谬误,会以 HTTP 的状态码 作为 视图页地址(viewName),找到真正的页面
      • error/404、5xx.html

总结:

 如果感觉返回的信息不够,能够自定义 DefaultErrorAttributes。如果不想让他响应默认谬误页或 json,能够自定义 BasicErrorController。如果不想把谬误页面放在 error 文件夹下,能够自定义 DefaultErrorViewResolver 
正文完
 0