自定义错误页面在Spring Boot中的实现

news2024/9/24 13:17:59

引言

在SpringBoot中,常用的异常处理有两种:一种是 BasicErrorController,另一种是 @ControllerAdviceBasicErrorController 用于处理非Controller抛出的异常,而@ControllerAdvice 用于处理Controller抛出的异常,对于非Controller抛出的异常它是不会管的。但是,如果是Controller层调用Service层,从Service层抛出,依然会抛到Controller,所以还是会调用@ControllerAdvice进行处理。

ControllerAdvice:异常处理异常处理

SpringBoot 默认的处理异常的机制是通过 BasicErrorController 类来实现的。当程序中出现异常时,SpringBoot 会向 /error 的 URL 发送请求。BasicErrorController 负责处理这个请求,并根据异常类型跳转到相应的页面来展示异常信息。

在 SpringBoot 中,可以通过配置自定义的错误页面来覆盖默认的错误页面。

1. 创建错误页面

首先,我们需要创建自定义的错误页面。在src/main/resources/templates/error目录下,创建HTML文件,例如对于error错误,创建error.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>自定义错误页面</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f0f0f0;
            text-align: center;
            padding: 50px;
        }
        h1 {
            font-size: 48px;
            color: #333;
        }
        p {
            font-size: 24px;
            color: #666;
        }
        a {
            display: inline-block;
            padding: 10px 20px;
            background-color: #007bff;
            color: #fff;
            text-decoration: none;
            border-radius: 5px;
        }
    </style>
</head>
<body>
<h1>发生错误!</h1>
<p>请稍后重试或联系管理员。</p>
<span th:text="${msg}"></span>
</body>
</html>

页面使用到了 thymeleaf

导包

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2. 创建全局异常处理类

GlobalException:(普通的处理请求)

@Component
public class GlobalException implements HandlerExceptionResolver {
 
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView modelAndView = new ModelAndView();
//        if (e instanceof NullPointerException){
//            modelAndView.setViewName("error");
//        }
            modelAndView.setViewName("error");
        modelAndView.addObject("msg",e.toString());
        return modelAndView;
    }
}

AjaxGlobalException:(ajax的请求方式,返回的使json数据)

public class AjaxGlobalException {

    @ResponseBody
    @ExceptionHandler
    public Map errorHandler(Exception e) {

        Map<String, Object> m = new HashMap<>();
        m.put("status", 500);
        m.put("msg", e.toString());

        return m;
    }
}

2. 创建Controller

@RestController
public class ErrorController {

    @GetMapping("/showList")
    public String showList() {
        int i = 1/0;
        return "showList";
    }
    @GetMapping("/showAll")
    public String showAll() {
        return "showAll";
    }
}

测试

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

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

相关文章

windows vs2005编译libssh2支持sftp

windows vs2005编译libssh2支持sftp 1、编译模块 ​ 需要用到4个库&#xff1a;libcurl、libssh2、openssl、zlib 为啥要用libssh2 因为libcurl实现sftp功能依赖libssh2&#xff0c;是对libssh2的封装。 所以也可以直接用libssh2实现sftp。 为啥要用openssl 因为libssh2依…

【linux】查看进程和子进程

在Linux系统中&#xff0c;可以使用多个命令来查看进程及其子进程。以下是一些常用的方法&#xff1a; 1. ps 命令 ps 命令用于显示当前进程的状态。可以结合不同的选项来查看进程及其子进程。 查看进程树&#xff1a; ps -auxf - -a 显示所有进程。 - -u 显示进程的用户/所…

AI伦理边界:探索人工智能伦理计算

大家好&#xff0c;近年学界与工业界都已开始关注并热议 AI 伦理治理问题&#xff0c;也在伦理规范研究上取得了初步进展。然而&#xff0c;由于 AI 伦理的抽象性&#xff0c;如何定量化度量智能系统的伦理&#xff0c;还是一个未知的难题。 李学龙教授团队在《中国科学&#…

【学网攻】 第(5)节 -- Cisco VTP的使用

文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan 前言 网络已经成为了我们生活中不可或缺的一部分&#xff0c;它连接了世界各地的人们&#xff0c;让信息和资…

apple watch开通esim(一号双终端)报错解决方法

写在前面&#xff1a; 本文不一定可以解决您问题&#xff0c;本文记录了作者在遇到该情况时的处理办法&#xff0c;导致这个问题的原因会有很多&#xff0c;本文仅记录部分&#xff0c;仅供读者参考。与客服人员沟通时&#xff0c;请避免说esim&#xff0c;大多数客服人员不一定…

windbg :查看局部变量值

查看变量有以下几种常用方式&#xff1a; 仍以我们上篇 &#xff1a; 《windbg : x 命令》中的代码作为示例来讲解使用。 源码&#xff1a; #include <iostream>using namespace std;struct JKGirl{std::string name;int age;friend ostream& operator <<(o…

【机器学习300问】17、什么是欠拟合和过拟合?怎么解决欠拟合与过拟合?

一个问题出现了&#xff0c;我们首先要描述这个问题&#xff0c;然后分析问题出现的原因&#xff0c;找到原因后提出解决方案。废话不多说&#xff0c;直接上定义&#xff0c;然后通过回归和分类任务的例子来做解释。 一、什么是欠拟合和过拟合&#xff1f; &#xff08;1&am…

面试题:String s = new String(“xyz“) 创建了几个对象?

项目场景&#xff1a; 今天分享一篇基础技术面试题。 这个问题相信每个学习 java 的同学都不陌生&#xff0c;作为一个经典的面试题&#xff0c;到现在工作这么多年了我真是认为挺操蛋的一个问题&#xff0c;在网上到现在你仍然可以看见很多讨论这个问题的人&#xff0c;其中不…

酷开科技 | 酷开系统体育频道燃爆体育赛事,为偶像疯狂打CALL

体育竞技&#xff0c;总会带给我们激情澎湃的感受&#xff0c;兴奋、激动、热血&#xff0c;这些瞬间也许就是竞技体育的魅力&#xff01;酷开科技通过酷开系统的体育频道&#xff0c;为广大体育迷们提供了一个观赛平台。在这个平台上&#xff0c;你可以欣赏到各类体育赛事的精…

用JavaFX写了一个简易的管理系统

文章目录 前言正文一、最终效果1.1 主页面1.2 动物管理页面-初始化1.3 动物管理页面-修改&新增1.4 动物管理页面-删除&批量删除 二、核心代码展示2.1 启动类2.2 数据库配置-db.setting2.3 日志文本域组件2.4 自定义表格视图组件2.5 自定义分页组件2.6 动物管理页面2.7 …

JVM/GC复习1---更新中

JVM/GC JVMGC垃圾回收算法1.引用计数法2.标记清除发3.标记压缩算法4.复制算法5.分代算法 收集器1.串行垃圾收集器2.并行垃圾收集器2.CMS垃圾收集器 3.G1垃圾收集器(重点)jdk1.7开始1.9默认的回收器Young GC模式Mixed GCFull GC JVM 待更新中ing GC 垃圾回收:程序运行的时候必…

2024年美赛数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

【JSON2WEB】03 go的模板包html/template的使用

Go text/template 是 Go 语言标准库中的一个模板引擎&#xff0c;用于生成文本输出。它使用类似于 HTML 的模板语言&#xff0c;可以将数据和模板结合起来&#xff0c;生成最终的文本输出。 Go html/template包实现了数据驱动的模板&#xff0c;用于生成可防止代码注入的安全的…

一文掌握Shell

文章目录 Shell概述脚本的常用执行方式Linux中的sh解释器Linux中的/etc 编写sh脚本第一个sh脚本变量1. 系统预定义变量2. 自定义变量3. 变量定义规则单引号和双引号的区别 4. 特殊变量 运算符命令替换条件判断常用判断语句 流程控制if语句case语句while循环 read读取控制台输入…

生产、计划、仓库、质量,一大堆的工厂数据要怎么收集?MES系统替你解决!

随着制造业的发展和进步&#xff0c;工厂运营面临着越来越多的挑战&#xff0c;特别是在数据管理和生产过程控制方面。生产、计划、仓库、质量等方面的数据分散在各个系统和部门中&#xff0c;数据的收集和分析变得复杂而困难。然而&#xff0c;MES系统为工厂提供了一个综合性解…

成功安装DCNv4

最终结果 终于安装成功了。 环境 系统&#xff1a;ubuntu22.04 CUDA&#xff1a;12.1 python&#xff1a;3.11 显卡驱动&#xff1a;545 安装过程 系统、CUDA和python的安装过程忽略&#xff0c;这些都能找到。这里只写不同的地方。 配置CUDAHOME 执行命令“ gedit ~/…

余弦定理是怎么推导的?

余弦定理是怎么推导的? 已知余弦定理(low of cosines)表达如下: A B 2 = B C 2 + A C 2 − 2 B C ∗ A C ∗ cos ⁡ θ AB^2=BC^2+AC^2-2BC*AC*\cos \theta AB2=BC2+AC2−2BC∗AC∗cosθ,其中 A B , B C , A C AB,BC,AC AB,BC,AC和 θ \theta θ的关系如下: 那么这个公式是…

数据库缓存策略

数据库缓存策略 以下是数据库与缓存的五种常见策略。 1缓存旁路 缓存旁路&#xff08;Cache-Aside&#xff09; 在缓存旁路策略中&#xff0c;数据库缓存位于数据库旁边。当应用程序请求数据时&#xff0c;它会首先检查缓存 如果缓存中存在数据&#xff08;缓存命中&#xff…

风速预测 | Python基于CEEMDAN-CNN-Transformer+ARIMA的风速时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 CEEMDAN-CNN-TransformerARIMA是一种用于风速时间序列预测的模型&#xff0c;结合了不同的技术和算法。收集风速时间序列数据&#xff0c;并确保数据的质量和完整性。这些数据通常包括风速的观测值和时间戳。CEEMDAN分…

SpringCloudAlibaba系列之Nacos实战

目录 注意事项 参考资源 Nacos配置中心 初始化项目 进行Nacos相关配置 运行 Nacos注册中心 dubbo方式 对外暴露接口dubbo-api 服务提供者dubbo-provider 服务消费者dubbo-consumer 负载均衡客户端方法 服务提供者 服务消费者 注意事项 不管是使用Nacos配置中心&…