【Spring项目中的统一处理异常】

news2024/11/26 10:42:11

目录

1. 统一处理异常的机制

2. 关于统一处理异常的方法

3. 关于处理异常的方法的执行特点


1. 统一处理异常的机制

Spring MVC框架提供了统一处理异常的机制!表现为每种类型的异常只需要写一段(写一次)处理此异常的代码即可,项目中无论处理哪种请求时,只要出现这种异常,都会自动执行这段代码!

 提示:当项目中添加了spring-boot-starter-web依赖项,此依赖项中的核心就是Spring MVC框架的依赖项。

在实现统一处理异常之前,需要先使得控制器中处理请求的方法不再处理异常!则处理请求的方法表现为抛出异常(但并不需要从代码中显式的表现出来)!

2. 关于统一处理异常的方法

  • 访问权限:应该使用public
  • 返回值类型:参考处理请求的方法
  • 方法名称:自定义
  • 参数列表:至少有1个异常类型的参数,表示被处理的异常,另外,可以按需添加;HttpServletRequestHttpServletResponse等少量特定类型的参数,不可以随意添加其它;参数,例如不可以添加HttpSession等,如果有多个参数,各参数可以不区分先后顺序;
  • 注解:必须添加@ExceptionHandler,表示此方法是处理异常的方法。
@ExceptionHandler
public String handleServiceException(ServiceException e) {
    return e.getMessage();
}

3. 关于处理异常的方法的执行特点

  • 允许同时存在多个处理异常的方法,只要这些方法处理的异常不完全相同即可;
  • 多个处理异常的方法,其处理的异常类型允许存在继承关系;
    • 例如某方法处理NullPointerException,另一个方法处理RuntimeException,是正确的;
    • 当出现子级异常时,将执行处理子级异常的方法;
  • 如果将处理异常的方法定义在控制器类中,则这些方法只能作用于当前控制器类中处理的请求;
  • 可以自定义类,在类上添加@RestControllerAdvice注解,将处理异常的方法声明在这个类中,可以作用于当前项目中所有处理请求时方法。

则在项目的根包下创建ex.handler.GlobalExceptionHandler类,在类上添中@RestControllerAdvice注解,并在此类中处理异常(在任何控制器类中都不再处理异常):

package cn.tedu.csmall.product.ex.handler;

import cn.tedu.csmall.product.ex.ServiceException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler
    public String handleServiceException(ServiceException e) {
        return e.getMessage();
    }

    @ExceptionHandler
    public String handleNullPointerException(NullPointerException e) {
        return "程序出现了空指针异常,已经被处理!";
    }

    @ExceptionHandler
    public String handleRuntimeException(RuntimeException e) {
        return "程序出现了RuntimeException,已经被处理!";
    }

}

User login(String username, String password) throws 用户名不存在异常, 密码错误异常, 账号非法状态异常……

// boolean:表示登录成功,或登录失败
// 			但是,无法表示哪种失败
// int:使用某个数据表示某种状态,例如1表示登录成功,2表示用户名错,3表示密码错,4表示封号,等等
//			但是,无法返回登录成功的结果

try {
    User user = service.login("root", "1234");
    // 将User对象保存到Session中
} catch (用户名不存在异常 e) {
    
} catch (密码错误异常 e) {
    
} catch (账号非法状态异常 e) {
    
}

个人主页:居然天上楼

感谢你这么可爱帅气还这么热爱学习~~

人生海海,山山而川

你的点赞👍 收藏⭐ 留言📝 加关注✅

是对我最大的支持与鞭策

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

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

相关文章

需求:针对同一个表格多次导入是否要做判断(此项目是用得若依)

每次上传表时,将上传的表名与以往上传的表名做对比,如果相同,则提示表已经有记录,是否上传相同表并结束此方法。 实现思路: 首先,每次上传表都要把表明记录一下,可以新建一个表(数…

天宇优配|离岸人民币狂拉逾千点!中概股暴涨!B站涨22%

当地时间周二,美股三大指数收盘涨跌纷歧。道指涨0.01%,标普500指数跌0.16%,纳指跌0.59%。 抢手中概股领涨,纳斯达克我国金龙指数大涨5.04%,哔哩哔哩(B站)涨超22%。大型科技股多数跌落&#xff0…

小程序中的confirm-type设置键盘的确认按钮

详情: confirm-type是很多小程序组件中的一种设置,用于改变输入键盘右下角的确认按钮。比如说,正常情况下,键盘上的默认提示可能是完成,但是你可以通过confirm-type将其设置为发送,搜索等,在特…

间隔不到一年开两店,温州鸿雁全屋智能经销商透露了他的生意经

作者 | 牧之 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn编者按:间隔不到一年,连续开设了两家全屋智能体验店。这是发生在温州的渠道商故事。本期专访,「智哪儿」对话浙江林上智能科技有限公司总经理朱飞隆先生。他为何做智能家居?为何…

翻转单词序列、按之字形顺序打印二叉树、二叉搜索树的第k个节点

1、翻转单词序列 本题考点:子串划分,子串逆置 牛客链接 题目描述: 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻…

Python数据库编程之关系数据库API规范

Python关系数据库API规范 对于关系数据库的访问,Python社区已经制定出一个标准,称为Python Database API Specification。Mysql,Oracal等特定数据库模块遵从这一规范,而且可以添加更多特性。 高级数据库API定义了一组用于连接数…

三十六、Java 泛型

Java 泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 假定我们有这…

火山引擎 DataLeap 的 Data Catalog 系统公有云实践

Data Catalog 通过汇总技术和业务元数据,解决大数据生产者组织梳理数据、数据消费者找数和理解数的业务场景。本篇内容源自于火山引擎大数据研发治理套件 DataLeap 中的 Data Catalog 功能模块的实践,主要介绍 Data Catalog 在公有云部署和发布中遇到挑战…

5. LSTM的C++实现

[C 基于Eigen库实现CRN前向推理] 第三部分:TransposedConv2d实现 (含dilation) 前言:(Eigen库使用记录)第一部分:WavFile.class (实现读取wav/pcm,实现STFT)第二部分:Conv2d实现第三部分:Tran…

你知道不同U盘在ARM+Linux下的读写速率吗?

优秀的产品离不开完善的测试,即使一个简单的USB接口也要确保稳定性及兼容性。不同的U盘在ARMLinux板卡下的兼容性、速率怎么样呢?本文将为大家提供测试参考数据及详细测试步骤! 1. 测试准备 主控选用最近发布的64位Cortex-A55核心板&#xff…

设计模式-day01

1,设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大(Christopher Alexand…

深入理解SR-IOV和IO虚拟化

一、背景 SR-IOV(Single Root I/O Virtualization)是由PCI-SIG组织定义的PCIe规范的扩展规范《Single Root I/O Virtualization and Sharing Specification》,目的是通过提供一种标准规范,为VM(虚拟机)提供…

springboot+vue职称评审管理系统

开发语言:Java 框架:Springbootssm(SpringSpringMVCMyBatis) JDK版本:JDK1.8 前端框架:vue.js 服务器:tomcat 数据库:mysql 数据库工具:Navicat11 开发软件:eclipse/idea都支持 Mave…

前端页面的性能测试

介绍 随着 Web 应用的空前发展,前端业务逐渐复杂,为了处理这些复杂业务,前后端分离,出现了专门应对这种分离架构的应用开发框架,比如 Angular,React,Vue 等,从而也导致 Web 应用的复…

高效率开发Web安全扫描器之路(一)

一、背景 经常看到一些SRC和CNVD上厉害的大佬提交了很多的漏洞,一直好奇它们怎么能挖到这么多漏洞,开始还以为它们不上班除了睡觉就挖漏洞,后来有机会认识了一些大佬,发现它们大部分漏洞其实是通过工具挖掘的,比如说下…

linux服务器监控性能测试

一、服务器实时内存监控 1、top:能够实时监控系统的运行状态,并且可以按照cpu以及内存等进行排序。 输入:top -help就可以出现下面的例子: 命令例子:top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o fiel…

计算机网络——分层结构,协议接口,服务

分层结构 主机进行资源共享时需满足以下条件: (1)发起通信的计算机要将数据通路进行激活 (2)告诉网络如何识别主机 (3)发起通信的主机要查明目的主机是否开机等 (4)发起…

Java 中你绝对没用过的一个关键字?

这节课给大家介绍一个 Java 中的一个关键字 Record,那 Record 关键字跟不可变类有什么关系呢?看完今天的文章你就知道了。友情提示 Record 关键字在 Java14 过后才支持的,所以是不是被我说中了,还在使用 Java 8 的你一定没用过&am…

vpp hqos分析

vpp支持两套qos实现,一套是基于policer实现的qos,另外一套是基于dpdk的qos套件实现的hqos。 (免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂 更多DPDK相关学习资料有…

DPU网络开发SDK——DPDK(一)

随着软件定义网络SDN的不断发展,网络数据转发面的需求越来越多样化,这体现在更快的数据包处理速率,更高的网络吞吐带宽,更灵活的自定义网络协议。传统的硬件设备无法满足网络协议的自定义,而基于Linux内核网络协议栈的…