6. 自定义异常 全局异常处理 测试异常处理

news2025/1/19 8:09:36

目录

1. 自定义异常

2. 全局异常处理

3. 测试异常处理


1. 自定义异常

创建⼀个异常类,加入状态码与状态描述属性。
凡是业务代码中出现的可预期的异常,统一抛出 ApplicationException
public class ApplicationException extends RuntimeException{

    // 用来描述具体的异常信息
    protected AppResult errorResult;

    public AppResult getErrorResult() {
        return errorResult;
    }

    public ApplicationException(AppResult errorResult) {
        super(errorResult.getMessage());
        this.errorResult = errorResult;
    }

    public ApplicationException(String message) {
        super(message);
    }

    public ApplicationException(String message, Throwable cause, AppResult errorResult) {
        super(message, cause);
    }

    public ApplicationException(Throwable cause, AppResult errorResult) {
        super(cause);
    }
}

2. 全局异常处理

使用 @ControllerAdvice + @ExceptionHandler 注解实现统⼀异常处理,@ControllerAdvice 表示控制器通知类。
//添加注解
@Slf4j  // 日志
@ControllerAdvice
public class GlobalExceptionHandler {
    // 以 JSON 的形式返回 body 中的数据
    @ResponseBody
    // 指定要处理的异常
    @ExceptionHandler(ApplicationException.class)
    public AppResult handleApplication(ApplicationException exception){
        // 打印异常信息,上线生产之前要删除这个打印方式
        exception.printStackTrace();
        // 打印日志
        log.info(exception.getMessage());
        // 判断自定义的异常信息是否为空
        if(exception.getErrorResult() != null){
            // 返回异常类中记录的状态
            return exception.getErrorResult();
        }
        // 根据异常信息,封装 AppResult
        return AppResult.failed(exception.getMessage());
    }
    @ResponseBody
    @ExceptionHandler(Exception.class)
    public AppResult handeleException(Exception e){
        // 打印异常信息,上线生产之前要删除这个打印方式
        e.printStackTrace();
        // 打印日志
        log.info(e.getMessage());
        // 判断自定义的异常信息是否为空
        if(e.getMessage() != null){
            // 默认异常信息
            return AppResult.failed(ResultCode.ERROR_SERVICES.getMessage());
        }
        // 根据异常信息,封装 AppResult
        return AppResult.failed(e.getMessage());
    }
}

3. 测试异常处理

在TestController中添加如下方法:
@Slf4j //日志
@RestController //表示在 Body 中返回数据
@RequestMapping("/test") // 一级映射路径
public class TestController {

    @GetMapping("/hello") // 二级映射路径
    public String hello() {
        return "Hello, Spring Boot...";
    }

    @GetMapping("/exception")
    public AppResult testException() throws Exception{
        throw new Exception("这是一个 Exception...");
    }

    @GetMapping("/applicationException")
    public AppResult testApplicationException(){
        throw new ApplicationException("这是一个 ApplicationException...");
    }
}

可以看到异常处理的相关代码测试成功,可以正常运行。 

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

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

相关文章

[Java优选系列第1弹]如何优化Java三层架构开发效率?三个实用技巧分享

💞优选系列制作漫长,每篇一经写出不再创作,均是呕心沥血制作,且看且珍惜💫 一直在等你,你终于来啦💖 绿色代表解释说明 黄色代表重点 红色代表精髓 Java三层架构…

qt 安 装

之后版本都是在线安装 下载地址 Index of /archive/online_installers 只用这三个即可,其他不用管默认

操作系统-笔记-第一章-操作系统的概念

目录 一、第一章——操作系统的概念 1、操作系统的概念、功能 (1)层次 (2)总结 2、操作系统的特征(4个) (1)并发与并行 (2)共享与互斥 (3…

【网络基础实战之路】基于MPLS-VPN技术实现两个私网间互通的实战详解

系列文章传送门: 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 【网络基础实战之路】基于…

主流的嵌入式微处理器

目前主流的嵌入式微处理器系列有: ARM系列 MIPS系列 PowerPC系列 Super H系列 一、MPC/PPC系列 PowerPC(简称PPC),其基本设计源自IBM的POWER.1991年,APPLE(苹果电脑)、IBM、Motorola(摩托罗拉)组成的AIM联盟发展出Power微处理器…

Windows Server 2019设置使用照片查看器查看图片的设置方法

1、使用winR快捷键快速打开运行,输入regedit打开注册表: 2、在注册表中找到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations 3、在右侧新建字符串项: 4、例如新建两项.jpg 和.png值…

eNSP:mpls综合实验

实验要求&#xff1a; 拓扑图 路由、IP配置 r1: <Huawei>sys [Huawei]sys r1 [r1]int lo0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int g 0/0/0 [r1-GigabitEthernet0/0/0]ip add 192.168.2.1 30[r1]ip route-static 192.168.3.0 30 192.168.2.2 [r1]ip rou…

生信豆芽菜-TIP预测免疫

网址&#xff1a;http://www.sxdyc.com/immuneTipScore 一、TIP预测免疫的介绍 TIP&#xff08;Tumor Immune Prediction&#xff09;是一种用于预测肿瘤免疫状态的计算方法。它通过分析基因表达数据来推断肿瘤样本中的免疫细胞浸润情况和免疫反应程度。 TIP的基本原理如下&…

HTML中的字符串转义

为什么要转义&#xff1f; 转义可以防止 xss 攻击。接下来&#xff0c;我们来看一下如何转义。 HTML Sanitizer API Sanitizer 是浏览器自带的转义方法&#xff0c;在2021年初被提出&#xff0c;兼容性问题很大。 列举几个常用的 API&#xff1a; const $div document.qu…

RTC实验

一、RTC简介 RTC(Real Time Clock)即实时时钟&#xff0c;它是一个可以为系统提供精确的时间基准的元器件&#xff0c;RTC一般采用精度较高的晶振作为时钟源&#xff0c;有些RTC为了在主电源掉电时还可以工作&#xff0c;需要外加电池供电BCD码&#xff0c;四位二进制表示一位…

Cesium--一些实验过程中的效果记录

1.一种反射效果&#xff1a; 片元着色器代码 fragmentShaderSource:in vec3 v_positionMC;in vec3 v_positionEC;in vec2 v_st;void main(){czm_materialInput materialInput;vec3 normalEC normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), ve…

从零开始,外贸邮件营销如何做?

邮件营销是外贸企业开发新用户和维系老客户非常有效的方法之一&#xff0c;因其操作方便快捷、成本低廉且精准投放的特性&#xff0c;已成为外贸行业的必备营销手段。但如何才能利用好邮件营销&#xff0c;让邮件营销的作用发挥到最大呢&#xff1f;今天U-Mail李工就跟大家分享…

Neo4j的使用场景_以及Windows版Neo4j Community Server安装_欺诈检测_推荐_知识图谱---Neo4j图数据库工作笔记0003

可以看到使用场景,比如欺诈检测, 要建立图谱,才能进行,欺诈人员检测 可以看到图谱的各种应用场景 然后推荐引擎也需要,可以看到 在金融,旅行,求职招聘,保健,服务,媒体娱乐,都可以进行推荐 然后还有知识图谱 身份访问管理,这里,可以进行安全管理,可以挖掘出潜在关系,分析, 某…

【Nacos2.24持久化到Postgres数据库适配——详细版】

Nacos2.24持久化到Postgres数据库适配 前言步骤拉取源码添加依赖修改源码编译打包修改配置测试运行 参考 前言 公司基于springboot实现了一套单体框架&#xff0c;目前我负责搭建SpringCloud微服务框架&#xff0c;需要用到nacos&#xff0c;但是由于公司特殊性&#xff0c;na…

IntelliJ IDEA 2023.1 windows找不到文件‘chrome’

异常效果图 1、【打开设置】 2、 搜索【web brow】 3、 在桌面上找到常用的浏览器 例如我的edge-【右击】-【打开文件位置】-【找到目标】-【双击】-【ctrla全选】-【ctrlc复制】 4、修改正确的路径如下&#xff1a; 5、再次尝试打开【main.jsp】 浏览器正常显示&#xff01;…

十、接口(1)

本章概要 抽象类和方法接口创建 默认方法多继承接口中的静态方法Instrument 作为接口 接口和抽象类提供了一种将接口与实现分离的更加结构化的方法。 这种机制在编程语言中不常见&#xff0c;例如 C 只对这种概念有间接的支持。而在 Java 中存在这些关键字&#xff0c;说明…

SAP MM学习笔记23-购买发注的账户分配类型(勘定Category)

SAP中控制财务凭证过账科目的是 账号分配类型&#xff08;勘定Category&#xff09;栏目。 ・账号分配类型&#xff08;勘定Category&#xff09;有&#xff1a; 1&#xff0c;K 原价Center&#xff08;成本中心。用于消耗物料采购 的过账&#xff09; 2&#xff0c;E 得意先…

任我行CRM系统存在 SQL注入漏洞[2023-HW]

任我行CRM系统存在 SQL注入漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现小龙POC又是一通哈拉少 五、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及…

嵌入式编译x264源码

x264下载地址:直接下载下来就行 1.解压缩到你的服务器上 2.准备编译 3.使用编译命令: ./configure --prefix../x264build --disable-asm --enable-shared --enable-static --hostarm-linux-gnueabihf --cross-prefixarm-linux-gnueabihf- --disable-opencl --enable-pic --di…