当前位置: 首页 > news >正文

java全局异常处理(springboot)

介绍:

在日常项目开发中,异常是常见的,但是如何更高效的处理好异常信息,让我们能快速定位到BUG,是很重要的,不仅能够提高我们的开发效率,还能让你代码看上去更舒服,SpringBoot的项目已经对有一定的异常处理了,但是对于我们开发者而言可能就不太合适了,因此我们需要对这些异常进行统一的捕获并处理。

我们只需在完整的springboot项目中添加四个java类即可

一:异常枚举类

/*** @version 1.0* @Author guozhen8* @Date 2023年11月23日 0023 17:57:01* @注释 异常返回枚举类*/
@Getter
@ToString
@AllArgsConstructor
public enum RespBeanEnum {SUCCESS(200,"SUCCESS"),ERROR(500,"服务端异常"),BIND_ERROR(500210,"参数校验异常"),NULL_ERROR(500211,"找不到数据"),INSERT_ERROR(500212,"数据插入异常-主键重复" );private final Integer code;private final String message;}

二:异常返回结果类

/*** @version 1.0* @Author guozhen8* @Date 2023年11月23日 0023 17:57:01* @注释 异常返回类*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RespBean {private long code;private String message;private Object obj;/*** 功能描述:返回成功结果* @param* @return*/public static RespBean success(){return new RespBean(RespBeanEnum.SUCCESS.getCode(),RespBeanEnum.SUCCESS.getMessage(),null);}/*** 功能描述:返回成功结果* @param obj* @return*/public static RespBean success(Object obj){return new RespBean(RespBeanEnum.SUCCESS.getCode(),RespBeanEnum.SUCCESS.getMessage(),obj);}/*** 功能描述:返回失败结果* @param respBeanEnum* @return*/public static RespBean error(RespBeanEnum respBeanEnum){return new RespBean(respBeanEnum.getCode(),respBeanEnum.getMessage(),null);}/*** 功能描述:返回失败结果* @param respBeanEnum,obj* @return*/public static RespBean error(RespBeanEnum respBeanEnum,Object obj){return new RespBean(respBeanEnum.getCode(),respBeanEnum.getMessage(),obj);}
}

三:全局异常

/*** @version 1.0* @Author guozhen8* @Date 2023年11月23日 0023 17:57:01* @注释 全局异常*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GlobalException extends RuntimeException{private RespBeanEnum respBeanEnum;
}

四:全局异常处理类

/*** @version 1.0* @Author guozhen8* @Date 2023年11月23日 0023 17:57:01* @注释 自定义异常处理类*/
@RestControllerAdvice
public class GlobalExceptionHandler {//调试日志private final Logger logger = LoggerFactory.getLogger(this.getClass());@ExceptionHandler(Exception.class)//处理哪些异常public RespBean ExceptionHandler(Exception e,HttpServletRequest request){//打印日志logger.error("Requst URL : {},Exception : {}", request.getRequestURL(),e);if(e instanceof GlobalException){//如果是之前自定义的异常GlobalException ex = (GlobalException) e;return RespBean.error(ex.getRespBeanEnum());}else if(e instanceof BindException) { //没有通过参数校验注解抛出的异常BindException ce = (BindException) e;RespBean respBean = RespBean.error(RespBeanEnum.BIND_ERROR);respBean.setMessage("参数校验异常:" + ce.getMessage());return respBean;}else if(e instanceof DuplicateKeyException) { //插入重复数据抛出的异常DuplicateKeyException de = (DuplicateKeyException) e;RespBean respBean = RespBean.error(RespBeanEnum.INSERT_ERROR);respBean.setMessage("参数插入异常:" + de.getMessage());return respBean;}else if(e instanceof  ConstraintViolationException) { //传入数据有误抛出的异常ConstraintViolationException de = ( ConstraintViolationException) e;RespBean respBean = RespBean.error(RespBeanEnum.BIND_ERROR);respBean.setMessage("参数校验异常:" + de.getMessage());return respBean;}return RespBean.error(RespBeanEnum.ERROR);}}

五:使用方法

在使用时,我们可以返回异常结果类或者直接抛出相关异常即可。

//1:返回异常结果
return  RespBean.error(RespBeanEnum.ERROR,"xxxx");
return RespBean.success("xxxx");
//2:抛出异常
throw new BindException("xxxx");

相关文章:

java全局异常处理(springboot)

介绍: 在日常项目开发中,异常是常见的,但是如何更高效的处理好异常信息,让我们能快速定位到BUG,是很重要的,不仅能够提高我们的开发效率,还能让你代码看上去更舒服,SpringBoot的项目…...

JAVA将PDF转图片

前言 当今时代,PDF 文件已经成为了常用的文档格式。然而,在某些情况下,我们可能需要将 PDF 文件转换为图片格式,以便更方便地分享和使用。这时,我们可以使用 Java 编程语言来实现这个功能。Java 提供了许多库和工具&a…...

合并区间[中等]

一、题目 以数组intervals表示若干个区间的集合,其中单个区间为intervals[i] [starti, endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。 示例 1: 输入:intervals […...

MYSQL基础知识之【LIKE子句的使用 ,NULL值的处理,空值的处理】

文章目录 前言MySQL LIKE 子句在PHP脚本中使用 LIKE 子句 MySQL NULL 值处理在命令提示符中使用 NULL 值使用PHP脚本处理 NULL 值 后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Mysql 🐱‍👓博主在前端领域还有…...

线索二叉树:C++实现

引言: 线索二叉树是一种特殊的二叉树,它可以通过线索(线索是指在二叉树中将空指针改为指向前驱或后继的指针)的方式将二叉树转化为一个线性结构,从而方便对二叉树进行遍历。本文将介绍如何使用C实现线索二叉树。 技术…...

C++——vector互换容器与预留空间

一.vector互换容器 功能描述:实现两个容器内元进行互换 函数原型: swap(vec); //将vec与本身的元素互换 实例: //1.基本使用 void test01() {vector<int>v1;for (int i 0; i < 10; i){v1.push_back(i);}cout << "交换前:" << e…...

Unity 自带的一些可以操控时间的属性或方法。

今天来总结下Unity自带的一些可以操控时间的方法。 1、Time.time。比较常用计算运行时间而触发特定事件。 public class Controller : MonoBehaviour {public float eventTime 5f; // 触发事件的时间private float startTime; // 游戏开始的时间private void Start(){startT…...

vue 项目中使用 mqtt

1、在html 中用cdn方式引入 <script src"https://unpkg.com/mqtt/dist/mqtt.min.js"></script> 2、封装代码 mqtt_connect.js // import * as mqtt from mqtt/dist/mqtt.min // 不知道为什么 我用引入的方式不成&#xff0c;就在html 用的cdn方式接入了…...

linux shell操作 - 05 进程 与 IO 模型

文章目录 计算机内存分配进程与子进程流IO模型非阻塞IOIO多路复用网络IO模型简单的socket并发的socket 计算机内存分配 一个32位&#xff0c;4G内存的计算机&#xff0c;内存使用分为两部分&#xff1a; 操作系统内核空间&#xff1b;应用程序的用户空间使用的操作系统不同&a…...

让SOME/IP运转起来——SOME/IP系统设计(下)之数据库开发

上一篇我们介绍了SOME/IP矩阵的设计流程&#xff0c;这一篇重点介绍如何把SOME/IP矩阵顺利的交给下游软件团队进行开发。 车载以太网通信矩阵开发完成后&#xff0c;下一步应该做什么&#xff1f; 当我们完成SOME/IP矩阵开发&#xff0c;下一步需要把开发完成的矩阵换成固定格…...

Mybatis反射工厂类DefaultReflectorFactory

DefaultReflectorFactory是反射工厂接口ReflectorFactory的默认实现&#xff0c;其主要是实现了对反射对象Reflector的创建和缓存。 有三个方法&#xff1a; // 判断是否开启缓存boolean isClassCacheEnabled();// 设置是否缓存void setClassCacheEnabled(boolean classCacheEn…...

antDesignPro a-table样式二次封装

antDesignPro是跟element-ui类似的一个样式框架&#xff0c;其本身就是一个完整的后台系统&#xff0c;风格样式都很统一。我使用的是antd pro vue&#xff0c;版本是1.7.8。公司要求使用这个框架&#xff0c;但是UI又有自己的一套设计。这就导致我需要对部分组件进行一定的个性…...

找免费4K高清图片素材,就上这6个网站

使用图片素材怕侵权&#xff1f;那就上这6个网站&#xff0c;免费下载&#xff0c;4K高清无水印&#xff0c;赶紧收藏起来~ 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYxMjky 一个很大的素材库&#xff0c;站内主要还是以设计素材为主&#xff0c;像图片素材就有上百…...

代码随想录算法训练营第35天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

JAVA代码编写 860.柠檬水找零 在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品&#xff0c;&#xff08;按账单 bills 支付的顺序&#xff09;一次购买一杯。 每位顾客只买一杯柠檬水&#xff0c;然后向你付 5 美元、10 美元或 20 美元。你必须…...

成为AI产品经理——TPR、FPR、ROC、AUC

目录 一、PR图、BEP 1.PR图 2.BEP 二、灵敏度、特异度 1.灵敏度 2.特异度 三、真正率、假正率 1.真正率 2.假正率 三、ROC、AUC 1.ROC 2.AUC 四、KS值 一、PR图、BEP 1.PR图 二分类问题模型通常输出的是一个概率值&#xff0c;我们需要设定一个阈值&#xff…...

java: Internal error in the mapping processor: java.lang.NullPointerException

启动java项目出错&#xff0c;其他人工程没有问题&#xff0c;别着急。 java: Internal error in the mapping processor: java.lang.NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifestUrl(DefaultVersionInformation.j…...

TCP知识点

TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层协议&#xff0c;广泛应用于互联网。下面是TCP的一些知识点&#xff1a; TCP是一种可靠的协议&#xff0c;采用三次握手建立连接和四次挥手断开…...

大语言模型(LLMs)在 Amazon SageMaker 上的动手实践(一)

本期文章&#xff0c;我们将通过三个动手实验从浅到深地解读和演示大语言模型&#xff08;LLMs&#xff09;&#xff0c;如何结合 Amazon SageMaker 的模型部署、模型编译优化、模型分布式训练等。 实验一&#xff1a;使用 Amazon SageMaker 构建基于开源 GPT-J 模型的对话机器…...

顶级数据恢复工具—— 最全的15个数据恢复软件榜单

在这个信息为王的数字时代&#xff0c;关键数据的丢失对个人和企业来说都可能是灾难性的。无论是由于意外删除、硬件故障还是恶意攻击&#xff0c;拥有强大的数据恢复解决方案都是至关重要的。在本综合指南中&#xff0c;我们将探索市场上最好的数据恢复软件&#xff0c;包括顶…...

【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解

【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】Inception-ResNet模型算法详解前言Inception-ResNet讲解Inception-ResNet-V1Inception-ResNet-V2残差模块的缩放(Scaling of the Residuals)Inception-…...

深度学习在文档图像矫正(Dewarp)与阅读顺序预测(ROP)中的前沿应用与实践

1. 文档图像矫正&#xff08;Dewarp&#xff09;技术的前世今生 第一次看到弯曲的发票被AI拉直时&#xff0c;我盯着屏幕愣了三秒——这简直像变魔术。你可能也遇到过类似场景&#xff1a;用手机拍摄纸质文档时&#xff0c;边缘总是扭曲变形&#xff0c;文字像被哈哈镜照过一样…...

ClawdBot快速入门:详细教程解决devices approve授权问题

ClawdBot快速入门&#xff1a;详细教程解决devices approve授权问题 1. ClawdBot简介&#xff1a;你的本地AI助手 ClawdBot是一个可以在个人设备上运行的个人AI助手&#xff0c;它使用vLLM提供后端模型能力。与依赖云端服务的AI助手不同&#xff0c;ClawdBot完全在本地运行&a…...

ollama部署本地大模型|granite-4.0-h-350m在在线教育平台智能答疑中的应用

ollama部署本地大模型&#xff5c;granite-4.0-h-350m在在线教育平台智能答疑中的应用 1. 在线教育答疑的痛点与解决方案 在线教育平台最头疼的问题之一&#xff0c;就是学生随时提出的各种问题。传统的人工答疑方式存在明显瓶颈&#xff1a;老师回复不及时、夜间无人值守、重…...

终极指南:用wiliwili在Switch等游戏主机上解锁B站全功能体验

终极指南&#xff1a;用wiliwili在Switch等游戏主机上解锁B站全功能体验 【免费下载链接】wiliwili 第三方B站客户端&#xff0c;目前可以运行在PC全平台、PSVita、PS4 、Xbox 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili 还在为S…...

Qwen3-TTS-12Hz-1.7B-Base效果展示:德语严谨播报vs意大利热情解说对比

Qwen3-TTS-12Hz-1.7B-Base效果展示&#xff1a;德语严谨播报vs意大利热情解说对比 语音合成技术的新突破&#xff1a;多语言语音合成模型Qwen3-TTS-12Hz-1.7B-Base在语音表现力方面达到了新的高度&#xff0c;特别是在不同语言风格的表现上展现出惊人的多样性。 1. 模型核心能力…...

若依前后端分离版部署实战:Nginx反向代理+生产环境优化配置

若依前后端分离版生产环境部署全攻略&#xff1a;Nginx调优与安全实践 第一次将若依框架部署到生产环境时&#xff0c;我遇到了前端资源加载缓慢、后端接口频繁超时的问题。经过多次实战调优&#xff0c;终于总结出一套兼顾性能与安全的部署方案。本文将分享从基础部署到深度优…...

隐私安全首选:DeepSeek-R1本地推理引擎快速上手指南

隐私安全首选&#xff1a;DeepSeek-R1本地推理引擎快速上手指南 1. 为什么选择本地推理引擎 在当今数据安全日益重要的时代&#xff0c;越来越多的用户开始关注AI应用的隐私保护问题。传统的云端AI服务虽然功能强大&#xff0c;但存在数据外泄的风险&#xff0c;尤其对于处理…...

BLIP 实战手册:从零到一完成 Image-Text Captioning 任务微调

1. 认识BLIP与Image-Text Captioning 第一次接触BLIP模型时&#xff0c;我被它处理图像和文本的能力惊艳到了。想象一下&#xff0c;你给模型一张猫咪晒太阳的照片&#xff0c;它能自动生成"一只橘猫在窗台上慵懒地晒太阳"这样的描述——这就是Image-Text Captioning…...

Qwen3-0.6B-FP8部署教程:NVIDIA驱动兼容性检查、CUDA版本匹配与验证方法

Qwen3-0.6B-FP8部署教程&#xff1a;NVIDIA驱动兼容性检查、CUDA版本匹配与验证方法 想快速体验一个轻量级但能力不俗的大语言模型吗&#xff1f;Qwen3-0.6B-FP8就是一个绝佳的选择。它虽然体积小巧&#xff0c;但在推理、对话和指令遵循方面表现亮眼&#xff0c;特别适合个人…...

Keil5编译链设置避坑指南:为什么你的AC5突然不能用了?

Keil5编译链设置避坑指南&#xff1a;为什么你的AC5突然不能用了&#xff1f; 上周三凌晨两点&#xff0c;李工在办公室对着屏幕上的红色报错信息揉着太阳穴——他负责维护的工业控制器项目突然无法编译了。这个基于STM32F103的老项目已经稳定运行了5年&#xff0c;最后一次修…...