Spring Boot 3自定义错误页面

教程分享 > Java教程 > Spring (171) 2024-09-07 22:10:03

SpringBoot默认的错误处理机制了解

1)浏览器,返回一个默认的错误页面

Spring Boot 3自定义错误页面_图示-0a1b6f6d4e0a48d3af9b36b406d418c5.png
Spring Boot 3自定义错误页面_图示-2392e565eec34d789d4958d0532dcfc9.png

2)如果是其他客户端(app),默认响应一个json数据(postman模拟)

Spring Boot 3自定义错误页面_图示-7f90cee1a9a44d34a0e966af30530334.png

客户端的请求头

Spring Boot 3自定义错误页面_图示-8277335c3c7c499da4f4905f6023065e.png

3)springboot错误处理原理:
ErrorMvcAutoConfiguration:错误处理的自动配置;它给容器中添加了以下组件。

a ) DefaultErrorAttributes:帮我们在页面共享信息

Spring Boot 3自定义错误页面_图示-268adf3c9e4f4d53a1a7fcdb70c93dab.png

b ) BasicErrorController:处理默认/error请求(根据请求头选择具体方法)

Spring Boot 3自定义错误页面_图示-9334ffec1a4c4005a3d9eafa9bc35a01.png

 

c)ErrorPageCustomizer:
系统出现错误以后来到error请求进行处理;(web.xml注册的错误页面规则)

Spring Boot 3自定义错误页面_图示-0a6d87009c344e0687696b1d385cbc74.png

d ) DefaultErrorViewResolver:默认的错误视图解析

Spring Boot 3自定义错误页面_图示-5ff8b6ca5b5f4cf5bf1306ea33d68fce.png

 

springboot错误处理步骤:
a)一但系统出现4xx或者5xx之类的错误;ErrorPageCustomizer就会生效(定制错误的响应规则);就会来到/error请求;
b)error请求会被BasicErrorController处理(根据请求头进行不同处理);
c)响应页面;去哪个页面是由DefaultErrorViewResolver解析得到的;
 

Spring Boot 3自定义错误页面_图示-ca133fcf9f9b4a72aedc5e99fc411655.png

2 如何定制错误响应

1 ) 如何定制错误的页面:

a)、有模板引擎的情况下;error/状态码; 【将错误页面命名为 错误状态码.html 放在模板引擎文件夹里面的error文件夹下】,发生此状态码的错误就会来到 对应的页面;
我们可以使用4xx和5xx作为错误页面的文件名来匹配这种类型的所有错误,精确优先(优先寻找精确的状态码.html);

在templates下新建error目录,新建异常页面404.html,400.html,并编写动态错误信息
 

templates/error/4xx.html
templates/error/4xx.html

浏览器访问不存在的uri,结果如下

 

页面能获取的信息;
timestamp:时间戳
status:状态码
error:错误提示
exception:异常对象
message:异常消息
errors:JSR303数据校验的错误都在这里

b)、没有模板引擎(模板引擎找不到这个错误页面),静态资源文件夹下找;
此时错误页面是静态的
不能动态获取页面的timestamp、status等信息

c)、以上都没有错误页面,就是默认来到SpringBoot默认的错误提示页面;

2)如何定制错误的json数据:

a ) 自定义异常处理&返回定制json数据;
    缺点:不能自适应,浏览器和postman都返回json

 

b)添加转发到/error进行自适应响应效果处理

return “forward:/error”;转发到/error请求,会被BasicErrorController(ErrorMvcAutoConfiguration组件)处理做出自适应响应

自适应问题解决了,但是响应状态码默认是200

需要手动设置错误状态码 

boot3 如下设置

request.setAttribute(“jakarta.servlet.error.status_code”,404);

boot2设置

request.setAttribute(“javax.servlet.error.status_code”,404);

 

c)将我们的定制数据携带出去(终极版);
出现错误以后,会来到/error请求,会被BasicErrorController处理,响应出去可以获取的数据是由getErrorAttributes得到的(是AbstractErrorController(ErrorController)规定的方法);
l)方案一:完全来编写一个ErrorController的实现类【或者是编写AbstractErrorController的子类】,放在容器中,这种方法比较复杂;
ll ) 页面上能用的数据,或者是json返回能用的数据都是通errorAttributes.getErrorAttributes得到;
容器中DefaultErrorAttributes.getErrorAttributes();默认进行数据处理的;
 

方案二:自定义ErrorAttributes

Spring Boot 3自定义错误页面_图示-720209dea40e4a26a1fe35298f8749fb.png

 

Spring Boot 3自定义错误页面_图示-a6f2e125d44d40abaee03a00bf01394d.png

最终的效果:响应是自适应的,可以通过定制ErrorAttributes改变需要返回的内容,

Spring Boot 3自定义错误页面_图示-0bbe83638bbb41e4968818749e570508.png

 

效果:

Spring Boot 3自定义错误页面_图示-fa55200b26fc49f3892d82217666d0db.png

 

来源:SpringBoot 默认错误页面&错误页面定制

 

https://www.leftso.com/article/2409072146536218.html

相关文章
一、SpringBoot默认的错误处理机制1)浏览器,返回一个默认的错误页面2)如果是其他客户端(app),默认响应一个json数据(postman模拟)客户端
从Spring 6和Spring Boot 3开始,Spring框架支持“HTTP API的问题详细信息”规范RFC 7807。本Spring Boot 教程将详细指导您完成这一新增强。1.问题...
前言使用Spring Boot 3 Security 6.2 JWT 完成无状态的REST接口认证和授权管理。环境JDK 17Spring Boot 3.3.2
Spring Boot validation整合hibernate validator实现数据验证,Spring Boot validation使用说明,Spring Boot validat...
引言    通过之前spring boot mybatis 整合的讲解: spring boot mybaties整合  (spring boot mybaties 整合 基于Java注解方式写...
Spring Boot 2.0,Spring框架的Spring Boot 中的Spring Boot Actuator变化讲解。并且了解如何在Spring Boot 2.0中使用Actuator...
spring boot 2.0 security 5.0 整合,实现自定义表单登录。spring boot 2.0框架使用。
升级环境说明目前项目使用的2.3.7版本(自己感觉还行,但是官方已经停止支持了。)Spring Boot 官方支持情况spring boot 官方支持情况官方在今年8月就终止了对2.3.x的版本...
Spring Boot 2.0 Redis整合,通过spring boot 2.0整合Redis作为spring缓存框架的实现。
Spring Boot 1.x升级到Spring Boot 2.0迁移指南
spring boot又一个spring框架的经典项目,本文讲解spring boot入门的环境配置以及第一个项目,Spring Boot 入门教程
spring boot入门,spring boot是一个崭新的spring框架分支项目,本文讲解其属性配置相关
spring boot 1.5整合redis实现spring的缓存框架,spring boot,redis
spring boot mybatis 整合使用讲解介绍,spring boot与MyBatis的使用讲解介绍。spring boot mybatis xml mapper方式的入门和通过一个简...
spring boot是一个崭新的spring框架分支项目,本文讲解基本的数据库配置