千家信息网

SpringBoot怎么定制错误页面及错误数据

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"SpringBoot怎么定制错误页面及错误数据",在日常操作中,相信很多人在SpringBoot怎么定制错误页面及错误数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2026年10月31日SpringBoot怎么定制错误页面及错误数据

这篇文章主要介绍"SpringBoot怎么定制错误页面及错误数据",在日常操作中,相信很多人在SpringBoot怎么定制错误页面及错误数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"SpringBoot怎么定制错误页面及错误数据"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

我们知道 Spring Boot 已经提供了一套默认的异常处理机制,但是 Spring Boot 提供的默认异常处理机制却并不一定适合我们实际的业务场景,因此,我们通常会根据自身的需要对 Spring Boot 全局异常进行统一定制,例如定制错误页面,定制错误数据等。

定制错误页面

我们可以通过以下 3 种方式定制 Spring Boot 错误页面:

  1. 自定义 error.html

  2. 自定义动态错误页面

  3. 自定义静态错误页面

自定义 error.html

我们可以直接在模板引擎文件夹(/resources/templates)下创建 error.html ,覆盖 Spring Boot 默认的错误视图页面(Whitelabel Error Page)。

示例 1

1. 在 spring-boot-adminex 的模板引擎文件夹(classpath:/resources/templates)下,创建一个 error.html,代码如下。

        自定义 error.html

自定义 error.html

status:

error:

timestamp:

message:

path:

2. 启动 Spring Boot,在完成登陆跳转到主页后,使用浏览器地访问"http://localhost:8080/111",结果如下图。

图1:自定义 error.html

由图 1 可以看出,Spring Boot 使用了我们自定义的 error.html 覆盖了默认的错误视图页面(Whitelabel Error Page)。

自定义动态错误页面

如果 Sprng Boot 项目使用了模板引擎,当程序发生异常时,Spring Boot 的默认错误视图解析器(DefaultErrorViewResolver)就会解析模板引擎文件夹(resources/templates/)下 error 目录中的错误视图页面。

精确匹配

我们可以根据错误状态码(例如 404、500、400 等等)的不同,分别创建不同的动态错误页面(例如 404.html、500.html、400.html 等等),并将它们存放在模板引擎文件夹下的 error 目录中。当发生异常时,Spring Boot 会根据其错误状态码精确匹配到对应的错误页面上。

示例 2

1. 在 spring-boot-adminex 的模板引擎文件夹下 error 目录中,创建一个名为 404.html 的错误页面,代码如下。

        

自定义动态错误页面 404.html

status:

error:

timestamp:

message:

path:

2. 启动 Spring Boot,在完成登陆跳转到主页后,在浏览器地址栏输入"http://localhost:8080/111",结果如下图。

图2:自定义动态错误页面(精确匹配)

模糊匹配

我们还可以使用 4xx.html 和 5xx.html 作为动态错误页面的文件名,并将它们存放在模板引擎文件夹下的 error 目录中,来模糊匹配对应类型的所有错误,例如 404、400 等错误状态码以"4"开头的所有异常,都会解析到动态错误页面 4xx.html 上。

示例 3

在 spring-boot-adminex 的模板引擎文件夹下 error 目录中,创建一个名为 4xx.html 的错误页面,代码如下。

        

自定义动态错误页面 4xx.html

status:

error:

timestamp:

message:

path:

2. 启动 Spring Boot,在完成登陆跳转到主页后,使用浏览器访问"http://localhost:8080/111",结果如下图。

图3:自定义动态错误页面(模糊匹配)

自定义静态错误页面

若 Sprng Boot 项目没有使用模板引擎,当程序发生异常时,Spring Boot 的默认错误视图解析器(DefaultErrorViewResolver)则会解析静态资源文件夹下 error 目录中的静态错误页面。

精确匹配

我们可以根据错误状态码(例如 404、500、400 等等)的不同,分别创建不同的静态错误页面(例如 404.html、500.html、400.html 等等),并将它们存放在静态资源文件夹下的 error 目录中。当发生异常时,Spring Boot 会根据错误状态码精确匹配到对应的错误页面上。

示例 4

1. 在 spring-boot-adminex 的静态资源文件夹 src/recources/static 下的 error 目录中,创建一个名为 404.html 的静态错误页面,代码如下。

        

自定义静态错误页面 404.html

status:

error:

timestamp:

message:

path:

2. 启动 Spring Boot,在完成登陆跳转到主页后,使用浏览器访问"http://localhost:8080/111",结果如下图。

图3:自定义静态错误页面(精确匹配)

由于该错误页为静态页面,无法识别 Thymeleaf 表达式,因此无法展示与错误相关的错误信息。

模糊匹配

我们还可以使用 4xx.html 和 5xx.html 作为静态错误页面的文件名,并将它们存放在静态资源文件夹下的 error 目录中,来模糊匹配对应类型的所有错误,例如 404、400 等错误状态码以"4"开头的所有错误,都会解析到静态错误页面 4xx.html 上。

示例 3

在 spring-boot-adminex 的模板引擎文件夹下的 error 目录中,创建一个名为 4xx.html 的错误页面,代码如下。

        

自定义静态错误页面 4xx.html

status:

error:

timestamp:

message:

path:

2. 启动 Spring Boot,在完成登陆跳转到主页后,使用浏览器访问"http://localhost:8080/111",结果如下图。

图3:自定义静态错误页面(模糊匹配)

错误页面优先级

以上 5 种方式均可以定制 Spring Boot 错误页面,且它们的优先级顺序为:自定义动态错误页面(精确匹配)>自定义静态错误页面(精确匹配)>自定义动态错误页面(模糊匹配)>自定义静态错误页面(模糊匹配)>自定义 error.html。

当遇到错误时,Spring Boot 会按照优先级由高到低,依次查找解析错误页,一旦找到可用的错误页面,则直接返回客户端展示。

定制错误数据

我们知道,Spring Boot 提供了一套默认的异常处理机制,其主要流程如下:

  1. 发生异常时,将请求转发到"/error",交由 BasicErrorController(Spring Boot 默认的 Error 控制器) 进行处理;

  2. BasicErrorController 根据客户端的不同,自动适配返回的响应形式,浏览器客户端返回错误页面,机器客户端返回 JSON 数据。

  3. BasicErrorController 处理异常时,会调用 DefaultErrorAttributes(默认的错误属性处理工具) 的 getErrorAttributes() 方法获取错误数据。

我们还可以定制 Spring Boot 的错误数据,具体步骤如下。

  1. 自定义异常处理类,将请求转发到 "/error",交由 Spring Boot 底层(BasicErrorController)进行处理,自动适配浏览器客户端和机器客户端。

  2. 通过继承 DefaultErrorAttributes 来定义一个错误属性处理工具,并在原来的基础上添加自定义的错误数据。

1. 自定义异常处理类

被 @ControllerAdvice 注解的类可以用来实现全局异常处理,这是 Spring MVC 中提供的功能,在 Spring Boot 中可以直接使用。

1)在 net.biancheng.net.exception 包内,创建一个名为 UserNotExistException 的异常类,代码如下。

package net.biancheng.www.exception;/*** 自定义异常*/public class UserNotExistException extends RuntimeException {    public UserNotExistException() {        super("用户不存在!");    }}

2)在 IndexController 添加以下方法,触发 UserNotExistException 异常,代码如下。

@Controllerpublic class IndexController {    ......    @GetMapping(value = {"/testException"})    public String testException(String user) {        if ("user".equals(user)) {            throw new UserNotExistException();        }        //跳转到登录页 login.html        return "login";    }}

3)在 net.biancheng.www.controller 中,创建一个名为 MyExceptionHandler 异常处理类,代码如下。

package net.biancheng.www.controller;import net.biancheng.www.exception.UserNotExistException;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import javax.servlet.http.HttpServletRequest;import java.util.HashMap;import java.util.Map;@ControllerAdvicepublic class MyExceptionHandler {    @ExceptionHandler(UserNotExistException.class)    public String handleException(Exception e, HttpServletRequest request) {        Map map = new HashMap<>();        //向 request 对象传入错误状态码        request.setAttribute("javax.servlet.error.status_code",500);        //根据当前处理的异常,自定义的错误数据        map.put("code", "user.notexist");        map.put("message", e.getMessage());        //将自定的错误数据传入 request 域中        request.setAttribute("ext",map);        return "forward:/error";    }}

2. 自定义错误属性处理工具

1)在 net.biancheng.www.componet 包内,创建一个错误属性处理工具类 MyErrorAttributes(继承 DefaultErrorAttributes ),通过该类我们便可以添加自定义的错误数据,代码如下。

package net.biancheng.www.componet;import org.springframework.boot.web.error.ErrorAttributeOptions;import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;import org.springframework.stereotype.Component;import org.springframework.web.context.request.WebRequest;import java.util.Map;//向容器中添加自定义的储物属性处理工具@Componentpublic class MyErrorAttributes extends DefaultErrorAttributes {    @Override    public Map getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {        Map errorAttributes = super.getErrorAttributes(webRequest, options);        //添加自定义的错误数据        errorAttributes.put("company", "www.biancheng.net");        //获取 MyExceptionHandler 传入 request 域中的错误数据        Map ext = (Map) webRequest.getAttribute("ext", 0);        errorAttributes.put("ext", ext);        return errorAttributes;    }}

2)在 templates/error 目录下,创建动态错误页面 5xx.html,代码如下。

        自定义 error.html

status:

error:

timestamp:

message:

path:

以下为定制错误数据:

company:

code:

path:

3)启动 Spring Boot,访问"http://localhost:8080/testException?user=user",结果如下图。

图4:定制错误数据

注意:为了避免拦截器干扰,建议先将拦截器屏蔽掉。

到此,关于"SpringBoot怎么定制错误页面及错误数据"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

错误 页面 静态 数据 处理 文件 动态 文件夹 目录 代码 引擎 模板 精确 浏览器 状态 浏览 客户 结果 不同 主页 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技巨头监管 互联网金融监管科技数据 关于新基建和互联网科技 互联网科技开发公司 合肥互联网科技公司 杭州互联网科技公司 互联网科技logo设计 互联网科技小额贷款 哈尔滨新华互联网科技 太原新华互联网科技学校怎么样 互联网科技公司招聘 恒银科技与互联网金融 互联网科技中介 栖莱科技互联网股份有限公司 晓花互联网科技有限公司网址 河南住房之家互联网科技 华夏恒生科技与互联网科技 2021互联网科技公司排名 锡山区互联网智能科技产品供应 互联网大会出现的黑科技 百单网互联网科技有限公司 广州淘业互联网络科技 互联网科技logo设计 栖莱科技互联网股份有限公司 科技互联网大厂 互联网科技研发水平 滨湖区互联网智能科技产品有哪些 富国互联网金融科技混合基金 科技互联网专业工作会议发言稿 宁波允成互联网科技有限公司
0