Spring异常处理器

文章目录

    • 1. 异常分析
    • 2. 异常处理器
      • 2.1 异常处理器核心
      • 2.2 异常处理顺序
    • 3. 自定义异常

1. 异常分析

 问题:
  程序允许不免的在各层都可能会产生异常,我们该如何处理这些异常? 如果只是在方法里面单独使用 try… catch… 语句去一个一个的进行捕捉处理的话,那毫无疑问是不现实的,因为异常数量是非常庞大的并且对于异常的出现种类是不可预料的,于是我们可以使用Spring框架提供的异常处理器进行处理。

 解决: 使用异常处理器在表现层进行统一处理(异常通过表现层进行逐层调用, 最后也都会抛回到表现层当中, 所以一般可以写在表现层进行处理)

2. 异常处理器

2.1 异常处理器核心

@ControllerAdvice: 声明其为异常处理器类, 用来处理系统当中的异常
@ResponseBody: 声明其返回数据放在返回体当中(用于返回异常处理之后的数据交给前端)
@RestControllerAdvice = @ControllerAdvice + @ResponseBody关键: 在每个异常处理方法的上面需要使用对应注解声明其处理异常的种类
@ExceptionHandler(xxx.class)
@ControllerAdvice // 注意此类需要让Spring配置类扫描
@ResponseBody
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class) // 处理全部异常public String doException(Exception ex){ // 用形参来接收异常/*1. 记录日志(错误堆栈)2. 发送邮件 -- 开发人员3. 发送邮件 -- 运维人员*/System.out.println(ex.getMessage());return "发生了Exception类型的异常.....";}
}

  Controller层

@RestController
public class AController {@RequestMapping("/TestA")public String TestA(){System.out.println("This is Test A");int x = 1 / 0;return "Successful connect TestA .......";}
}

  处理结果
在这里插入图片描述

2.2 异常处理顺序

  异常处理若具有包含关系,则会优先匹配更精确的处理器(即优先处理子类, 若子类不匹配再逐渐向上匹配)

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class) // 处理全部异常public String doException(Exception ex){ // 用形参来接收异常System.out.println(ex.getMessage());System.out.println("发生了Exception类型的异常.....");return "发生了Exception类型的异常.....";}@ExceptionHandler(ArithmeticException.class) // 处理算术异常public String doZeroException(ArithmeticException ex){ // 用形参来接收异常System.out.println(ex.getMessage());System.out.println("发生了ArithmeticException类型的异常.....");return "发生了ArithmeticException类型的异常.....";}
}

在这里插入图片描述

3. 自定义异常

  用户可以根据自己的项目设置对应特定的异常然后再进行处理

public class MyException extends Exception{Integer id;public MyException(Integer id, String message){super(message); // 利用父类注明异常信息this.id = id;}@Overridepublic String toString() {return "异常的ID为:" + id + "\n" +"异常的详细信息为" + getMessage();}
}
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {@ExceptionHandler(MyException.class) // 处理自定义异常public String MyException(MyException ex){System.out.println(ex.getMessage());return "自定义异常";}}
@RestController
public class AController {@RequestMapping("/TestA")public String TestA() throws MyException {System.out.println("This is Test A");throw new MyException(101, "101号自定义异常.....");}
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAC M1上docker rocketmq简单环境搭建和代码

工作了这么多年,rocketmq还没有用过,由于现在的工作中涉及到了,周六吃完午饭就开始搞,结果到现在3点钟才把环境弄好,测试代码搞起。 整个流程分成两步 安装简单的rocket环境起springboot项目测试 参考文章&#xff…

SQL Server 2012数据库允许远程连接设置

1、打开 SQL Server Management Studio 2、打开 Security 按照如下设置,然后点确定 3、打开SQL Server Configuration ManagerMent 4、如下图都设置为Enabled 6、sql server重启

企业和公司扩展WordPress网站的4种方法

Netflix 通过邮递观看 DVD。Apple 是一家计算机公司,而不是电话公司。WordPress 是一个博客平台。 这三个陈述有什么共同点?十年前都是对的,现在都不是了。如今,Netflix 以数字方式提供原创内容而闻名。Apple 正在推出其广受欢迎…

解决vue3中使用个别form表单校验失灵

当我点击校验时 其他都有触发校验 唯独radio没有触发,绑定都没有问题 看一下代码 const data reactive({form: {},rules: {serverStatus: [{ required: true, message: "服务状态不能为空", trigger: change }],tenantName: [{ required: true, messag…

Spring高手之路6——Bean生命周期的扩展点:BeanPostProcessor

文章目录 1. 探索Spring的后置处理器(BeanPostProcessor)1.1 BeanPostProcessor的设计理念1.2 BeanPostProcessor的文档说明 2. BeanPostProcessor的使用2.1 BeanPostProcessor的基础使用示例2.2 利用BeanPostProcessor修改Bean的初始化结果的返回值2.3 …

途乐证券|有色金属板块崛起涨超2%,云南锗业两连板

周三(7月5日),A股三大股指震荡整理。截至上午收盘,上证指数跌幅达0.51%,报3228.68点;深证成指和创业板指跌幅分别为0.53%和0.59%;沪深两市合计成交额5310.1.6亿元,总体来看,两市个股跌多涨少。 …

使用Stable Diffusion生成艺术二维码

在数字艺术的世界中,二维码已经从单纯的信息承载工具转变为可以展示艺术表达的媒介。这是通过使用Stable Diffusion的技术实现的,它可以将任何二维码转化为独特的艺术作品。接下来,我们将一步步教你如何使用Stable Diffusion生成艺术二维码。…

【备战秋招】每日一题:2022.11.3-华为机试-去除多余空格

为了更好的阅读体检,可以查看我的算法学习网 在线评测链接:P1058 题目描述 塔子哥最近接到导师的一个任务,需要他帮忙去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词…

【JavaScript】ES6新特性(5)

16. Promise Promise 是异步编程的一种解决方案,比传统的解决方案回调函数, 更合理和更强大 ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象 指定回调函数方式更灵活易懂解决异步 回调地狱 的问题 16.1 回调地狱 当一个回调函数…

并发编程 - Event Bus 设计模式

文章目录 Pre设计CodeBus接口自定义注解 Subscribe同步EventBus异步EventBusSubscriber注册表RegistryEvent广播Dispatcher 测试简单的Subscriber同步Event Bus异步Event Bus Pre 我们在日常的工作中,都会使用到MQ这种组件, 某subscriber在消息中间件上…

AIGC - Stable Diffusion 的 AWPortrait 1.1 模型与 Prompts 设置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131565908 AWPortrait 1.1 网址:https://www.liblibai.com/modelinfo/721fa2d298b262d7c08f0337ebfe58f8 介绍:AWPortrai…

使用LiteSpeed缓存插件将WordPress优化到100%的得分

页面速度优化应该是每个网站所有者的首要任务,因为它直接影响WordPress SEO。此外,网站加载的时间越长,其跳出率就越高。这可能会阻止您产生转化并为您的网站带来流量。 使用正确的工具和配置,缓存您的网站可以显着提高其性能。因…