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就行。
- 解决默认 /error 门路的申请;如果是响应页面,就响应 【new ModelAndView("error", model)】error页面。否则响应ResponseEntity,把map外面的所有数据响应进来,相当于json数据。
给容器中放这个组件:类型:DefaultErrorViewResolver -> id:conventionErrorViewResolver
- 如果产生谬误,会以HTTP的状态码 作为 视图页地址(viewName),找到真正的页面
- error/404、5xx.html
总结:
如果感觉返回的信息不够,能够自定义DefaultErrorAttributes。如果不想让他响应默认谬误页或json,能够自定义BasicErrorController 。如果不想把谬误页面放在error文件夹下,能够自定义DefaultErrorViewResolver