【Java】全局统一异常处理类封装

文章目录

  • 全局异常处理类
  • 自定义异常
  • 如何使用(手动抛出异常)

我是一名立志把细节说清楚的博主,欢迎【关注】🎉 ~

原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~

如有错误、疑惑,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持


下文中提到的 全局统一返回结果类Result 类)和 结果枚举类ResultCodeEnum 类),请看文章:【Java】全局统一返回结果类封装

我们在包路径(common.Exception)下创建 GlobalExceptionHandler 类:

全局异常处理类

@ControllerAdvice // AOP 面向切面。
public class GlobalExceptionHandler {@ResponseBody // 返回Json数据。@ExceptionHandler(DemoException.class) // 指定哪个类型的异常执行这个方法。public Result error(DemoException e) {return Result.build(e.getResultCode(), e.getMessage(), null);}@ResponseBody // 返回Json数据。@ExceptionHandler(Exception.class) // 异常处理器。public Result error(Exception e){e.printStackTrace();return Result.fail();}
}

自定义异常

@Data // Lombok 注解。
public class DemoException extends RuntimeException{ /*** 异常状态码。*/private Integer resultCode;/*** 接收状态码和错误消息创建异常对象。* @param resultCode 状态码。* @param resultMsg 错误消息。*/public DemoException(Integer resultCode,String resultMsg){super(resultMsg);this.resultCode = resultCode;}/*** 接收枚举类型参数* @param resultCodeEnum 枚举类型参数。*/public DemoException(ResultCodeEnum resultCodeEnum){super(resultCodeEnum.getResultMsg());this.resultCode = resultCodeEnum.getResultCode();}@Overridepublic String toString() {return "DemoException{" +"resultCode=" + resultCode +", resultMessage=" + this.getMessage() +'}';}
}

如何使用(手动抛出异常)

我们模拟用户登陆入参缺失的异常抛出。

    public Result login(User user) {// XXX 校验逻辑省略if (checkout) { // 登陆信息缺失,登陆校验失败。throw new SsyxException(ResultCodeEnum.USER_LOGIN_CHECK_ERROR); // 手动抛出异常。}//正常的登陆逻辑。return Result.success(userInfo);}

响应结果:

异常编码、异常信息都可以在 ResultCodeEnum 类中自定义。此处仅作为演示:

{"code": 412,"message": "失败,用户登陆校验不通过","data": []
}

上文中提到的 全局统一返回结果类Result 类)和 结果枚举类ResultCodeEnum 类),请看文章:【Java】全局统一返回结果类封装


我是一名立志把细节说清楚的博主,欢迎【关注】🎉 ~

原创不易, 如果有帮助 ,记得【点赞】【收藏】 哦~ ❥(^_-)~

如有错误、疑惑 ,欢迎【评论】指正探讨,我会尽可能第一时间回复的,谢谢支持

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

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

相关文章

纯CSS丝滑边框线条动画

在这个网站(minimal-portfolio-swart.vercel.app)发现一个不错的交互效果,用户体验效果很不错。如封面图所示,这个卡片上有一根白色的线条围绕着卡片移动,且在线条的卡片内部跟随这一块模糊阴影,特别是在线…

关于Nginx热部署的细节分析

文章目录 前言一、环境准备二、热部署步骤总结 前言 Nginx由于其高并发、高性能、可扩展性好、高可靠性、热部署、BSD许可证等优势被广泛使用,本人主要针对热部署的部分展开说明热部署的具体步骤以及步骤背后发生的具体事情。 本次热部署采用的Nginx版本号为&…

在CentOS 7上配置Elasticsearch开启自启动需要通过systemd服务管理器来实现

在CentOS 7上配置Elasticsearch开启自启动需要通过systemd服务管理器来实现。 1. 安装Elasticsearch 首先,确保你已经安装了Elasticsearch。如果还没有安装,可以按照以下步骤进行安装: # Import the Elasticsearch PGP key sudo rpm --import https://artifacts.elastic.…

常见设计模式之Java实现

引言 设计模式是软件工程中的一套被反复使用的、大家公认的、经过分类编目的代码设计经验的总结。它们是解决特定问题的模板,可以提高代码的可重用性、可读性和可维护性。本文将介绍Java中常见的20种设计模式,并提供具体的使用场景、设计模式的解释以及…

高通 Android 12/13冻结屏幕

冻结屏幕很多第一次听到以为是Android一种异常现象,实则不然,就是防止用户在做一些非法操作导致问题防止安全漏洞问题。 1、主要通过用户行为比如禁止下拉状态栏和按键以及onTouch事件拦截等,不知道请看这篇文章(Touch事件传递流…

GitHub打不开的解决方案

1、打开https://sites.ipaddress.com/github.com/找到DNS Resource Records,复制github的ip地址,先保存起来: 140.82.112.32、打开https://sites.ipaddress.com/fastly.net/找到DNS Resource Records,复制其中一个ip地址&#xf…

基于Nacos实现Sentinel规则持久化

基于Nacos实现Sentinel规则持久化 一、Sentinel使用痛点二、解决方案2.1 保存本地文件2.2 保存数据库2.3 保存到Nacos 三、规则持久化到Nacos3.1 Nacos服务端修改配置3.2 Sentinel控制台修改配置3.3 Nacos数据源整合到Sentinel中 一、Sentinel使用痛点 SpringCloudAlibaba帮我…

迷你手持小风扇哪个牌子质量好点?这五款迷你手持小风扇不要错过

随着空调的普及,我们对夏日热浪的抵抗力逐渐减弱。当从凉爽的空调屋步入闷热的户外、拥挤的交通工具或公共场所时,如何抵御热浪的侵袭成为大众关注的焦点。在这样的背景下,迷你手持小风扇凭借其便携性和即时降温功能,成为众多人的…

341_C++_使用C++中的std::map容器查找键的时候,注意给个默认值,防止成员函数value()未查找到键,确保即使键不存在,你也能安全地获取一个值

在C++中,std::map是一个关联容器,它存储的元素都是键值对(key-value pairs),并且按键(key)自动排序。 std::map有一个成员函数value(),它用于返回与给定键相关联的值。如果该键在map中不存在,则value()函数返回提供的默认值。 map<int, int> mKeyMaps; int ke…

降价!免费!AI大模型开启价格战,企业如何“薅”出绿色财富?

近期&#xff0c;国内大模型技术供应商之间的价格战&#xff0c;使得这项原本成本较高的技术变得更加亲民&#xff0c;极大降低了企业的技术采用门槛。这不仅为企业提供了经济实惠的技术解决方案&#xff0c;更为他们的绿色低碳转型之路带来了新的机遇。 随着全球气候变化问题…

MySQL -- 相关知识点

1.数据库相关介绍 数据库的选择通常取决于具体的应用需求&#xff0c;如性能、扩展性、数据一致性和易用性等因素。 1. 关系型数据库&#xff08;RDBMS&#xff09; MySQL&#xff1a; 广泛使用的开源数据库&#xff0c;支持大多数操作系统。强调易用性、灵活性和广泛的社区支…

基于Java+MySQL+Swing的学生管理系统

1.系统简介和开发背景 该同学工作积极主动、高效&#xff0c;学习认真&#xff0c;待人诚恳&#xff0c;能够做到服从指挥、认真听取老同志的指导&#xff0c;不怕苦、不怕累&#xff0c;表现有较强的求知欲&#xff0c;积极观察、体验、思考&#xff0c;并能够灵活运用自己的知…

自养号测评是什么?亚马逊、沃尔玛、Target卖家如何建立自己的护城河?

近期有跨境卖家咨询我自养买家账号测评的事情&#xff0c;他们还是有不了解自养号测评的&#xff0c;所以珑哥觉得有必要再讲一下卖家测评的一些事情&#xff0c;之前文章也说过。这可能是跨境卖家运营的一个趋势。今天珑哥着重来介绍一下自养号测评 一、什么叫做自养号测评&a…

OrangePi AIpro初体验之图片视频检测案例真实测评

OrangePi AIpro简介 OrangePi AIpro官网 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;其搭载了昇腾AI 处理器&#xff0c;可提供8TOPS INT8 的计算能力&#xff0c;内存提供了8GB 和16GB两种版本。可以实现图像、视频等多种数据分析与推理…

简述v-for中的key的理解

在 Vue 中&#xff0c;v-for 是用来基于一个数组来渲染一个列表的指令。而 key 是一个特殊的属性&#xff0c;在 v-for 中经常被用到&#xff0c;它主要帮助 Vue 跟踪每个节点的身份&#xff0c;从而重用和重新排序现有元素。 key 的作用 性能优化&#xff1a;当 Vue 检测到列…

2024-python字典-报错compounds.iloc[0].molecule_structures.keys()

2024-python字典-报错compounds.iloc[0].molecule_structures.keys() .keys()拿不到 需要如何解决呢 import ast# 假设 "molecular_structures "是一个看起来像 Python 字典的字符串 molecule_structures df_VEGFR2_compounds.iloc[0].molecule_structures # 安全…

全球点赞最高的人颜廷利:真正的人生目标是什么

在那个充满生机的2024年春天&#xff0c;记者有幸对中国第一起名大师的老师颜廷利教授进行了深入的访谈。带着对其人生哲学的强烈好奇&#xff0c;记者紧张而期待地提出了问题&#xff1a;“颜教授&#xff0c;您在漫长的人生旅途中最追求的是什么&#xff1f;” 宁夏银川、山东…

PMP考试没有考过应该如何再考?

一、接受失败&#xff0c;理性分析 其实&#xff0c;PMP考试可以在PMI一年有效期内提交补考申请&#xff0c;若已经过了一年有效期&#xff0c;考生则需要重新进行完整的PMP考试报名流程。PMP考试补考费用&#xff1a;2500元/次。 1.接受失败&#xff1a;接受并处理情绪。面对…

【Python数据分析】基于自回归积分滑动平均模型的疫情分析报告 附完整python代码

资源地址&#xff1a;Python数据分析大作业 2000字 图文分析文档 疫情分析完整python代码 数据分析 数据来自法国疫情数据 资源地址&#xff1a;Python数据分析大作业 2000字 图文分析文档 疫情分析完整python代码 代码详解 完整代码文件 主要是对时间序列数据进行分析和预…

C++|四种方法解决三线程按顺序轮流打印ABC的问题:互斥锁和条件变量、原子操作、信号量

基于Pthreads线程库的实现 g your_program.cpp -lpthread编译时确保链接了Pthreads库. #include <pthread.h> #include <iostream> #include <unistd.h>// 全局变量&#xff0c;用于控制打印顺序 int turn 0; // 定义互斥锁和条件变量 pthread_mutex_t lo…