Spring Boot学习之---Spring Boot的错误处理机制(八)

一、SpringBoot默认的错误处理机制

默认有两种:①浏览器的访问(响应html页面);②其他客户端的访问(响应json数据)。
为什么要区分为两种呢?因为发送的请求头不同,响应数据也不同。浏览器发发送请求:text/html;其他客户端发送请求:*/*

1、浏览器,返回一个默认的错误页面。响应页面

2、其他客户端(如Postman的模拟)。响应一个json数据

二、SpringBoot默认的错误处理机制 的原理

1、源码参考:spring-boot-autoconfigure-2.3.4.RELEASE.jar!\org\springframework\boot\autoconfigure\web\servlet\error\ErrorMvcAutoConfiguration.java  错误处理的自动配置

2、具体来看 ErrorMvcAutoConfiguration类,给容器中添加了以下重要的组件:

  1. DefaultErrorAttributes:获取错误信息
  2. BasicErrorController:处理默认/error请求
    同样的/error请求,根据请求头的不同,会有两种处理方式:
    1)、浏览器请求头:text/html,产生html类型的数据
    2)、其他客户端,产生json数据
  3. ErrorPageCustomizer:定制错误的响应规则(错误经ErrorPageCustomizer处理后,来到/error请求)
  4. DefaultErrorViewResolver:解析页面响应地址
  5. 自动配置的步骤:
    1)一旦系统出现4xx或5xx之类的错误,3.ErrorPageCustomizer就会生效,来到/error请求,接着就会被2.BasicErrorController处理。
    2)BasicErrorController有两种处理方式。
    3)这里先说对浏览器的处理(响应页面)。通过ModelAndView
    使用4.DefaultErrorViewResolver来具体实现。先去模板引擎templates目录下看有无error/状态码.html文件,有则响应该页面,无则再去静态资源文件夹static下看有无error/状态码.html文件,有则响应该页面,无则使用Spring Boot默认提供的错误提示页面。

三、定制错误响应

1、定制错误响应页面

  • ①有模板引擎时,自动在模板引擎路径下查找error/状态码.html页面。即可跳转到我们自己定制的错误页面。可以使用404等精准匹配错误,也可使用4xx和5xx来模糊匹配所有错误。以精准匹配优先。
    页面可以获取的信息:
    timestamp:时间戳
    status:状态码
    error:错误提示
    exception:异常对象
    message:异常消息
    errors:JSR303数据校验的错误都在这里

  • ②没有模板引擎时,或者在模板引擎下找不到这个错误页面,也可到静态资源文件夹下找到error页面,但也能无法获取timestamp等信息
  • ③上面都没有时,默认使用Spring Boot提供的错误提示页面

2、定制错误响应数据 --多为json数据

使用 @ResponseBody 可以返回json对象,但是没有自适应效果,不能实现返回页面。
将请求转发给/error后,Spring Boot会自动帮我们实现自适应两种效果。

3、将我们定制的数据 返回给页面或返回json数据

从上面我们可以知道发生错误后,ErrorPageCustomizer就会生效,来到/error请求,接着就会被BasicErrorController处理。BasicErrorController是怎么处理的呢,通过getErrorAttributes(..)方法,该方法对象的类实现了ErrorController接口。所以
实现方法之一是:我们需要重新编写自己的类来实现ErrorController接口,即可定制自己的数据。--需要重新的太多了,放弃
实现方法二:页面上所有能得到的数据都是通过DefaultErrorAttributes类的getErrorAttributes(..)方法得到的,所以我们只需要:在容器中加入我们自己定义的ErrorAttributes即可。

效果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值