广告
返回顶部
首页 > 资讯 > 精选 >SpringBoot怎么定制错误页面及错误数据
  • 512
分享到

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

2023-06-21 22:06:37 512人浏览 独家记忆
摘要

这篇文章主要介绍“SpringBoot怎么定制错误页面及错误数据”,在日常操作中,相信很多人在springBoot怎么定制错误页面及错误数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”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

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

<!DOCTYPE html><html lang="en" xmlns:th="Http://www.thymeleaf.org"><head>    <meta charset="UTF-8">    <title>自定义 error.html</title></head><body><h2>自定义 error.html</h2><p>status:<span th:text="${status}"></span></p><p>error:<span th:text="${error}"></span></p><p>timestamp:<span th:text="${timestamp}"></span></p><p>message:<span th:text="${message}"></span></p><p>path:<span th:text="${path}"></span></p></body></html>

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

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

图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

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

<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head>    <meta charset="UTF-8">    <title></title></head><body><h2>自定义动态错误页面 404.html</h2><p>status:<span th:text="${status}"></span></p><p>error:<span th:text="${error}"></span></p><p>timestamp:<span th:text="${timestamp}"></span></p><p>message:<span th:text="${message}"></span></p><p>path:<span th:text="${path}"></span></p></body></html>

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

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

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

模糊匹配

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

示例 3

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

<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head>    <meta charset="UTF-8">    <title></title></head><body><h2>自定义动态错误页面 4xx.html</h2><p>status:<span th:text="${status}"></span></p><p>error:<span th:text="${error}"></span></p><p>timestamp:<span th:text="${timestamp}"></span></p><p>message:<span th:text="${message}"></span></p><p>path:<span th:text="${path}"></span></p></body></html>

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

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

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

自定义静态错误页面

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

精确匹配

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

示例 4

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

<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head>    <meta charset="UTF-8">    <title></title></head><body><h2>自定义静态错误页面 404.html</h2><p>status:<span th:text="${status}"></span></p><p>error:<span th:text="${error}"></span></p><p>timestamp:<span th:text="${timestamp}"></span></p><p>message:<span th:text="${message}"></span></p><p>path:<span th:text="${path}"></span></p></body></html>

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

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

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

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

模糊匹配

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

示例 3

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

<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head>    <meta charset="UTF-8">    <title></title></head><body><h2>自定义静态错误页面 4xx.html</h2><p>status:<span th:text="${status}"></span></p><p>error:<span th:text="${error}"></span></p><p>timestamp:<span th:text="${timestamp}"></span></p><p>message:<span th:text="${message}"></span></p><p>path:<span th:text="${path}"></span></p></body></html>

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

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

图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<String, Object> 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<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {        Map<String, Object> 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,代码如下。

<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head>    <meta charset="UTF-8">    <title>自定义 error.html</title></head><body><p>status:<span th:text="${status}"></span></p><p>error:<span th:text="${error}"></span></p><p>timestamp:<span th:text="${timestamp}"></span></p><p>message:<span th:text="${message}"></span></p><p>path:<span th:text="${path}"></span></p><!--取出定制的错误信息--><h4>以下为定制错误数据:</h4><p>company:<span th:text="${company}"></span></p><p>code:<span th:text="${ext.code}"></span></p><p>path:<span th:text="${ext.message}"></span></p></body></html>

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

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

图4:定制错误数据

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

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

--结束END--

本文标题: SpringBoot怎么定制错误页面及错误数据

本文链接: https://www.lsjlt.com/news/301103.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot怎么定制错误页面及错误数据
    这篇文章主要介绍“SpringBoot怎么定制错误页面及错误数据”,在日常操作中,相信很多人在SpringBoot怎么定制错误页面及错误数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot怎...
    99+
    2023-06-21
  • SpringBoot定制三种错误页面及错误数据方法示例
    目录定制错误页面自定义 error.html自定义动态错误页面自定义静态错误页面定制错误数据1. 自定义异常处理类2. 自定义错误属性处理工具我们知道 Spring Boot 已经提...
    99+
    2022-11-12
  • Springboot错误页面和错误信息定制操作
    目录1、错误页面自定义2、错误数据2.1 默认错误数据2.2 自定义错误数据SpringBoot2.1.4错误处理机制 前面一片已经介绍了springboot错误处理的机制,其实从整...
    99+
    2022-11-12
  • springboot怎么自定义404、500错误提示页面
    本篇内容介绍了“springboot怎么自定义404、500错误提示页面”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!springboot ...
    99+
    2023-06-21
  • SpringBoot自定义错误页面方式有哪些
    这篇文章主要讲解了“SpringBoot自定义错误页面方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot自定义错误页面方式有哪些”吧!以前web.xml方式先来看下...
    99+
    2023-06-21
  • SpringBoot多种自定义错误页面方式小结
    目录以前web.xml方式SpringBoot中实现方式1.实现EmbeddedServletContainerCustomizer的bean2.通过拦截器方式3.自定义静态erro...
    99+
    2022-11-12
  • springboot自定义404、500错误提示页面的实现
    目录springboot 默认的异常处理机制使用模板引擎使用示例没有使用模板引擎springboot 默认的异常处理机制 springboot 默认已经提供了一套处理异常的机制。一旦...
    99+
    2022-11-12
  • php怎么输出错误到页面
    小编给大家分享一下php怎么输出错误到页面,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php输出错误到页面的方法:1、修改php.ini中的内容为“displa...
    99+
    2023-06-06
  • 怎么正确设计404错误页面
    小编给大家分享一下怎么正确设计404错误页面,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!404错误页面是什么?HTTP 404 错误意味着链接指向的网页不存在,...
    99+
    2023-06-10
  • 电脑404错误页面怎么解决
    当浏览器在打开一个网页时遇到404错误页面,意味着服务器无法找到请求的网页。这可能是由于网页不存在、被删除或被重命名所引起的。要解决...
    99+
    2023-09-05
    电脑
  • ASP.NET中customErrors与错误页面怎么设置
    在ASP.NET中,可以通过customErrors元素来设置错误页面。customErrors元素是Web.config文件中的一...
    99+
    2023-09-12
    ASP.NET
  • tomcat启动错误8080页面怎么解决
    当Tomcat启动时遇到8080错误页面时,一般有以下几种可能的解决方法: 检查端口是否被其他应用程序占用:打开命令提示符(或终...
    99+
    2023-10-22
    tomcat
  • SAP数据错误怎么解决
    本篇内容主要讲解“SAP数据错误怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SAP数据错误怎么解决”吧!对于公司间采购业务,很多项目启用STO,并且在发货方公司Billing过账的时候...
    99+
    2023-06-05
  • ajax的data参数错误导致页面崩溃怎么办
    这篇文章主要介绍ajax的data参数错误导致页面崩溃怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!今天准备把选定表格的其中一行的数据通过ajax传给后端,但是网站确崩溃了。代...
    99+
    2022-10-19
  • 数据库1045错误怎么处理
    数据库1045错误是因为用户没有足够的权限访问数据库导致的。处理方法如下: 检查用户名和密码是否正确:确保你正在使用正确的用户名...
    99+
    2023-10-28
    数据库
  • 数据库EXCEPTION_ACCESS_VIOLATION错误怎么修复
    数据库EXCEPTION_ACCESS_VIOLATION错误通常是由于内存访问错误引起的。要解决这个问题,可以尝试以下几种方法:1...
    99+
    2023-08-08
    数据库
  • 数据库报1045错误怎么处理
    数据库报1045错误一般是因为用户名或密码错误导致的。要处理这个问题,可以按照以下步骤进行操作: 首先确认用户名和密码是否正确,...
    99+
    2023-10-30
    数据库
  • 数据库报ORA-01196错误怎么办
    这篇文章主要为大家展示了“数据库报ORA-01196错误怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“数据库报ORA-01196错误怎么办”这篇文章吧。发...
    99+
    2022-10-18
  • 怎么解决数据库ORA-20005错误
    这篇文章主要介绍“怎么解决数据库ORA-20005错误”,在日常操作中,相信很多人在怎么解决数据库ORA-20005错误问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决...
    99+
    2022-10-19
  • 怎么解决数据库ORA-01511错误
    这篇文章主要讲解了“怎么解决数据库ORA-01511错误”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决数据库ORA-01511错误”吧!数据库版本1...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作