SpringBoot全局异常页面处理学习

news2024/12/23 10:35:52

首先我们先在控制器中写一个异常,默认情况下我们的SpringBoot异常页面是这个样子的。

示例代码如下:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author qinxun
 * @date 2023-06-15
 * @Descripion: 测试
 */
@RestController
public class IndexController {

    @GetMapping("/index")
    public String toIndex() {
        // 500状态码
        int i = 1 / 0;
        return "index";
    }
}

 一、自定义静态异常页面

自定义静态异常页面,我们可以分成两种方式,第一种就是使用HTTP状态码来命名页面,例如404.html,403.html,500html等。另一种就是直接定义一个4xx.html,表示400-499状态码的页面,5xx.html表示状态码500-599的异常页面。

我们在classpath:/static/error/路径下定义相关异常页面

 4xx.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <div>Http状态码400-499的异常页面</div>
</body>
</html>

5xx.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>Http状态码500-599的异常页面</div>
</body>
</html>

启动项目,如果项目抛出HTTP状态码500的错误,就会自动显示5xx.html这个页面,反之抛出状态码400的错误,就会显示4xx.html这个页面。

 二、自定义动态异常页面

 4xx.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>4xx</h1>
<table border="1">
    <tr>
        <td>path</td>
        <td>error</td>
        <td>message</td>
        <td>status</td>
    </tr>
    <tr>
        <td th:text="${path}"></td>
        <td th:text="${error}"></td>
        <td th:text="${message}"></td>
        <td th:text="${status}"></td>
    </tr>
</table>
</body>
</html>

5xx.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>5xx</h1>
<table border="1">
    <tr>
        <td>path</td>
        <td>error</td>
        <td>message</td>
        <td>status</td>
    </tr>
    <tr>
        <td th:text="${path}"></td>
        <td th:text="${error}"></td>
        <td th:text="${message}"></td>
        <td th:text="${status}"></td>
    </tr>
</table>
</body>
</html>

如果动态异常页面和静态异常页面同时存在,默认使用动态页面,完整的错误页面查找方式应该是:

发生500错误->查找动态500.html页面->查找静态500.html页面->查找动态5xx.html页面->查找静态5xx.html页面

页面上使用的path、error、message、status默认为SpringBoot的异常机制返回的。

我们重新访问接口:

 我们可以创建一个自定义类实现异常数据返回处理。

示例代码如下:

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;

/**
 * @author qinxun
 * @date 2023-06-16
 * @Descripion: 自定义异常数据返回
 */
@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
    @Override
    public Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {
        Map<String, Object> map = super.getErrorAttributes(webRequest, options);
        if ((Integer) map.get("status") == 500) {
            map.put("message", "服务器内部错误!");
        }
        return map;
    }
}

启动项目,我们重新访问接口:

 异常页面显示了我们自定义的异常数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mov、mvn、cmp等ARM汇编指令集数据处理类指令(三星2440A)

文章目录 前言一、为什么要学习汇编&#xff1f;二、2440下常用汇编指令1. 汇编指令集合2. 2440编译&#xff08;汇编&#xff09;工程框架 三、汇编指令详解1. mov指令2. mvn3. add、sub、mul、rsb&#xff08;算术运算&#xff09;4. and、orr、eor、bic5. cmp、teq、tst5.1 …

视频会议需要什么设备?视频会议软硬件介绍

视频会议系统简介 视频会议系统是一种通过网络技术实现远程音视频通信的系统。它可以让不同地点的人们在同一时间进行实时的视音频交流&#xff0c;从而实现远程会议、远程教育、远程医疗以及最近比较新兴的直播等应用场景。 视频会议系统组成 视频会议系统通常包括摄像头、…

chatgpt赋能python:Python中如何精确到小数点

Python中如何精确到小数点 Python作为一种高级编程语言&#xff0c;被广泛应用于数据科学、网站开发、人工智能等领域。在处理数字时&#xff0c;精度一直是一个非常重要的问题。本文将介绍如何在Python中精确到小数点&#xff0c;并给出实例演示。 为什么需要精确到小数点 …

C++11学习笔记(4)——通用工具(下)

太长了&#xff0c;分两篇写吧 书接上回 4.数值极值 std::numeric_limits 是 C 标准库中定义的一个模板类&#xff0c;位于 头文件中。它提供了关于各种数值类型的属性和极值的信息。这些信息可以帮助我们在程序中进行数值处理时&#xff0c;了解特定类型的数值范围、精度以及…

Flutter如何获取屏幕的分辨率和实际画布的分辨率

Flutter如何获取分辨率 在Flutter中&#xff0c;你可以使用MediaQuery来获取屏幕的分辨率和实际画布的分辨率。 要获取屏幕的分辨率&#xff0c;你可以使用MediaQuery.of(context).size属性&#xff0c;它返回一个Size对象&#xff0c;其中包含屏幕的宽度和高度。下面是一个获…

Redis中常见的一些问题

缓存穿透问题 什么是缓存穿透&#xff1f; 例如当我们根据id查询一个数据的时候&#xff0c;但是这个数据本身不存在或者已经被删除之后&#xff0c;缓存中不存在&#xff0c;就会去查询数据库&#xff0c;但是不存在的数据不会缓存到数据库中&#xff0c;那么一旦大量的这个请…

层序遍历的应用——判断二叉树是否为完全二叉树

思维导图&#xff1a; 一&#xff0c;完全二叉树的特点 假如我们现在有一颗完全二叉树&#xff0c;那它应该长什么样呢&#xff1f; 它应该长这样&#xff1a; 这样&#xff1a; 这样&#xff1a; 如果不是一…

6 种方式读取 Springboot 的配置,老鸟都这么玩(原理+实战)

大家好&#xff0c;我是小富&#xff5e; 从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一&#xff0c;但就是这么常用的功能&#xff0c;仍然有很多开发者在这个方面踩坑。 我整理了几种获取配置属性的方式&#xff0c;目的不仅是要让大家学会如何使用&#…

Exiv2 —— exiv2介绍及下载搭建环境(Vs2017)

Exiv2介绍 Exiv2 是一个跨平台C库和一个命令行实用程序&#xff0c;用于管理图像元数据。它提供对Exif&#xff0c;IPTC和XMP元数据以及ICC配置文件的快速简便的读写访问。 嵌入到各种格式的数字图像中。 Exiv2 作为免费软件提供&#xff0c;用于许多项目 包括KDE和Gnome Deskt…

chatgpt赋能python:Python自动化脚本编写——让工作更高效

Python自动化脚本编写——让工作更高效 在当今的工作中&#xff0c;自动化脚本已经成为了一个不可或缺的工具。而Python作为一门脚本语言&#xff0c;它的开源、易用以及强大的库使得它成为了很多人使用自动化脚本的首选语言。 在本文中&#xff0c;我们将会探讨如何使用Pyth…

ChatGPT 指南:角色扮演让回答问题更专业

让 ChatGPT 进行角色扮演 Act as ...&#xff0c;比如&#xff0c;律师、内科医生、心理医生、运动教练、哲学家、翻译、平面设计师、IT 工程师等等&#xff0c;从而才能让 ChatGPT 从这个角色角度来分析我们的问题&#xff0c;不然&#xff0c;它的回答可能会过于广泛。 下面以…

Vue中如何进行自动化测试与端到端测试(E2E测试)

Vue中如何进行自动化测试与端到端测试&#xff08;E2E测试&#xff09; Vue.js是一种流行的前端JavaScript框架&#xff0c;用于构建现代的单页应用程序。在Vue.js中&#xff0c;测试是一个非常重要的主题。测试可以确保代码的正确性&#xff0c;使代码更加可靠和可维护。在这…

p-tuing和Lora的区别

一、前言 自从chatgpt的爆火&#xff0c;也同时引发了国内大模型的热潮&#xff0c;像百度出了文心一言、阿里出了通义千问等&#xff0c;但是这些大模型并未开源&#xff0c;国内外开源的中等规模的模型有meta的LLaMA&#xff0c;斯坦福基于LLaMA微调的Alpaca&#xff0c;国内…

小程序开发的前沿趋势和技术

在过去的一年里&#xff0c;小程序已成为移动互联网行业最热门的话题之一。小程序已经改变了许多行业。那么&#xff0c;下一个小程序开发趋势是什么&#xff1f;下面我们就来分析一下。 随着微信小程序的开放和推广&#xff0c;小程序开发企业正在大力发展并逐渐从技术方面进…

【2023最新版】黑客零基础入门(全网最全)从零基础到进阶,学完这一篇就够了

学前感言 1.这是一条需要坚持的道路&#xff0c;如果你只有三分钟的热情那么可以放弃往下看了。2.多练多想&#xff0c;不要离开了教程什么都不会&#xff0c;最好看完教程自己独立完成技术方面的开发。3.有问题多google,baidu…我们往往都遇不到好心的大神&#xff0c;谁会无…

【Qt】使用libmodbus实现ModBusTcp

这里写目录标题 下载编译使用DemoQModbusTcpClient Demo:参照:Qt自带QModbusTcpClient,换个电脑就不好使了,换libmodbus 下载 可以去github下载 链接: https://pan.baidu.com/s/13lgEZ59Dt5M7zmTJNpfKvg?pwd=yzfm 提取码: yzfm 下载libmodbus 并解压 编译 进入该目录下…

智造零距离:工程师走访华秋深圳 PCB 工厂,观摩高可靠板制造流程

6月11日&#xff0c;来自硬十、是德、灵明光子、兆易创新、汇顶科技、中诺通讯等公司的近20位工程师走访了华秋深圳PCB工厂。华秋工艺经理余宁带领考察团参观了工厂的生产线&#xff0c;近距离观摩了PCB的制造流程。 参观环节正式开始前&#xff0c;工厂安排专家介绍PCB制造的详…

SpringBatch从入门到实战(四):执行上下文和单步骤重启

一&#xff1a;执行上下文 1.1 JobContext 作业上下文 JobContext 绑定 JobExecution 执行对象&#xff0c;为Job作业执行提供执行环境(上下文)。 1.2 StepContext 步骤上下文 StepContext 绑定 StepExecution 执行对象&#xff0c;为Step步骤执行提供执行环境(上下文)。 1…

Ansible playbook ----- 剧本

playbooks 本身由以下各部分组成 &#xff08;1&#xff09;Tasks&#xff1a;任务&#xff0c;即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 &#xff08;2&#xff09;Variables&#xff1a;变量 &#xff08;3&#xff09;Templates&#xff1a;模…

Ubuntu 20.04 LTS 安装教程

Ubuntu 20.04 LTS 以及必要软件的安装教程 1、Ubuntu 系统下载2、制作U盘安装盘3、安装Ubuntu系统4、必要软件安装4.1、调整系统时间4.2、安装搜狗中文输入法4.3、anaconda 安装4.4、安装 terminator4.4、安装 nvidia 驱动 1、Ubuntu 系统下载 官方桌面版下载&#xff1a;https…