ErrorMvcAutoConfiguration 自动配置异常处理规则
-
给容器中放这个组件:类型: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
总结:
如果觉得返回的信息不够,可以自定义DefaultErrorAttributes。
如果不想让他响应默认错误页或json,可以自定义BasicErrorController 。
如果不想把错误页面放在error文件夹下,可以自定义DefaultErrorViewResolver