当前位置: 首页 > 后端技术 > Java

1.SpringBoot异常处理自动配置原理

时间:2023-04-01 18:58:25 Java

ErrorMvcAutoConfiguration自动配置异常处理规则把这个组件放在容器中:type:DefaultErrorAttributes->****id:errorAttributespublicclassDefaultErrorAttributesimplementsErrorAttributes,HandlerExceptionResolverDefaultErrorAttributes:可以定义在错误页面包含哪些数据。把这个组件放到容器中:type:BasicErrorController-->id:basicErrorController(功能:json+白页适配响应)来处理默认/error路径的请求;如果是响应页面,响应[newModelAndView("error",model)]错误页面。否则,响应ResponseEntity,响应map中的所有数据,相当于json数据。容器中有组件View->id报错;(此视图响应默认错误页面)将组件BeanNameViewResolver放入容器中;使用返回的视图名称错误作为组件id,在容器中找到视图对象defaultErrorView。(springboot在容器中添加了一个BasicErrorController组件,只要向错误路径发送请求,就会默认去错误视图,而错误视图是容器中的一个视图组件。如何查找错误view?就是使用BeanNameViewResolver,视图解析器根据组件的id(error)找到它,最后将返回值error作为视图名称,并以此名称作为id来找到视图对象。相当于view最后渲染出来的。)点击(StaticView)defaultErrorView对象,发现里面有个render方法,响应一个默认的错误页面,相当于组件View->id的容器。它响应一个错误页面,默认是一个白页。总结:如果要返回页面,会发现报错视图【StaticView】。(默认是一个白页,因为它是硬编码的)。为什么BasicErrorController既能响应html页面又能响应json,是因为里面有两种处理方式。如果要自定义错误页面,可以自定义一个视图,视图的名称为error。把这个组件放到容器中:Type:DefaultErrorViewResolver->id:conventionErrorViewResolver如果出现错误,它会使用HTTP状态码作为视图页面地址(viewName)去寻找真正的页面error/404,5xx.html总结:如果你觉得返回的信息不够,可以自定义DefaultErrorAttributes。如果不想让他响应默认的错误页面或者json,可以自定义BasicErrorController。如果不想把错误页面放到错误文件夹下,可以自定义DefaultErrorViewResolver