SpringBoot实现自定义异常及全局异常处理,赶紧整起来!

文章目录

  • 一、什么是自定义异常及全局异常处理?
  • 二、使用步骤
    • 1.创建自定义异常BusinessException
    • 2.创建全局异常处理器GlobalExceptionHandler
    • 3.通用返回ResponseData
    • 4.使用
  • 总结


一、什么是自定义异常及全局异常处理?

在web服务中,我们的接口通常需要有统一的返回格式,而在程序开发过程中,不可避免的是需要处理各种异常,如果没有全局异常处理器,通常我们需要把异常一层层往上抛出,最后在controller层处理,这样不可避免的需要写大量异常处理的重复代码,如何避免这个问题,我们可以通过自定义异常结合全局异常处理器实现统一处理。

二、使用步骤

1.创建自定义异常BusinessException

代码如下:

package com.uhu.exception;import lombok.Data;/*** @author xxx* @description 自定义业务异常* @create 2023-11-15 09:59**/
@Data
public class BusinessException extends RuntimeException {private String message;public BusinessException(String message) {super(message);this.message = message;}public BusinessException(String message, Throwable cause) {super(message, cause);this.message = message;}
}

2.创建全局异常处理器GlobalExceptionHandler

代码如下:

package com.uhu.exception.handler;import com.uhu.common.ResponseData;
import com.uhu.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;/*** @author xxx* @description 全局异常处理器* @create 2023-11-15 10:10**/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(value = Exception.class)public ResponseData exceptionHandler(Exception e) {log.error("GlobalExceptionHandler exceptionHandler error message: {}", e.getMessage(), e);return ResponseData.error("服务器内部错误,请联系管理员");}/*** 自定义异常处理* @param e* @return*/@ExceptionHandler(value = BusinessException.class)public ResponseData businessExceptionHandler(BusinessException e) {log.error("GlobalExceptionHandler businessExceptionHandler error message: {}", e.getMessage(), e);return ResponseData.error(e.getMessage());}
}

3.通用返回ResponseData

代码如下:

package com.uhu.common;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.io.Serializable;/*** @author xxx* @description* @create 2023-10-01 16:52**/
@ApiModel("响应参数")
@Data
public class ResponseData<T> implements Serializable {@ApiModelProperty("响应码 0-success 500-error")private int code;@ApiModelProperty("响应消息")private String message;@ApiModelProperty("响应值")private T data;public ResponseData() {this.code = 0;this.message = "success";}public static ResponseData ok(Object obj) {ResponseData responseData = new ResponseData();responseData.setData(obj);return responseData;}public static ResponseData ok() {ResponseData responseData = new ResponseData();responseData.setMessage("success");return responseData;}public static ResponseData error() {return error(500, "error");}public static ResponseData error(String message) {return error(500, message);}public static ResponseData error(int code, String message) {ResponseData responseData = new ResponseData();responseData.setCode(code);responseData.setMessage(message);return responseData;}
}

4.使用

throw new BusinessException("xxx");

总结

以上就是今天要讲的内容,本文仅仅简单介绍了SpringBoot实现自定义异常及全局异常处理的使用,通过自定义异常及全局异常处理我们可以方便的处理异常。

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

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

相关文章

SQLServer添加Oracle链接服务器

又一次在项目中用到了在SQLServer添加Oracle链接服务器&#xff0c;发现之前文章写的也不太好使&#xff0c;那就再总结一次吧。 1、安装OracleClient 安装64位&#xff0c;多数SQLServer是64位&#xff0c;所以OracleClient也安装64位的&#xff1b; 再一个一般安装的Oracl…

demo(一)eureka----服务注册与提供

下面写一个简单的demo验证下eureka&#xff0c;实现服务注册、服务发现。 一、单节点&#xff1a; 1、api&#xff1a; 封装其他组件需要共用的dto 2、eureka-service服务注册中心&#xff1a; &#xff08;1&#xff09;pom: <?xml version"1.0" encoding&q…

主从复制和读写分离

MySQL 主从复制和读写分离&#xff1a; 主从复制&#xff1a;主MySQL上的数据&#xff0c;新增&#xff0c;修改库&#xff0c;表&#xff0c;表里的数据&#xff0c;都会同步到从MySQL上。 MySQL的主从复制的模式&#xff1a;&#xff08;面试题&#xff09; 1&#xff0c;异…

【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象

process对象是一个全局对象&#xff0c;提供当前Node.js 进程信息并对其进行控制。通常用于编写本地命令行程序。 1.进程事件 process对象是EventEmitter类的实例&#xff0c;因此可以使用事件的方式来处理和监听process对象的各种事件。以下是一些常用的process对象事件&…

3.4 Linux 软件管理

一. RPM 软件包管理器 1、软件包介绍 RPM&#xff08;RedHat Package Manager&#xff09;软件包&#xff1a;扩展名为“.rpm”。RPM本质上就是一个包&#xff0c;包含可以立即在特定机器体系结构上安装和运行的Linux软件。安装RPM软件包需要使用rpm命令或yum命令。 源代码软…

Linux 的端口区间及设置

在 Linux 中&#xff0c;端口区间分配和使用如下&#xff1a; 0到1023端口是系统保留的端口&#xff0c;由一些通用协议、应用程序及其服务使用。这些端口被标识为众所周知的端口&#xff0c;并且不能被用户程序使用。1024到49151端口是为用户程序保留的&#xff0c;通常也称为…

荧光量子效率积分球的优势是什么

荧光量子效率积分球是一种测量设备&#xff0c;可以用于测量荧光材料在特定波长下的量子效率。它由一个具有高朗伯特性的漫反射PTFE材料制成&#xff0c;具有高达99%的反射率和朗伯特性。积分球有三个开口&#xff0c;分别为光入射口、样品口和光出射口。光入射口设置有一准直镜…

6-8.4V双节锂电升压12V 4A 24V2A大电流升压IC

SC3671 是一款专为升压、升降压开关电源设计的专用 DC-DC 控制器芯片。 SC3671 典型应用支持 5-35V 输入电压范围。通过扩展输入供电&#xff0c;也可以支持 100V 以上的输入电压范围。芯片采用固定频率的 PWM 控制方式&#xff0c;并在轻载条件下自动降频提高转换效率。芯片…

windows10上使用Visual Studio对树莓派进行交叉编译示例

本文主要介绍通过Visual Studio对树莓派进行交叉编译的方法。 1 环境 宿主机&#xff1a; 系统&#xff1a;Windows10 开发平台&#xff1a;Visual Studio 2022 (我用的是社区版) VisualGDB: VisualGDB - Download (我下的试用版本) GNU工具链: Prebuilt GNU toolchain f…

Android设计模式--Builder建造者模式

一&#xff0c;定义 Builder模式是一步一步创建一个复杂对象的创建型模式&#xff0c;它允许用户在不知道内部构建细节的情况下&#xff0c;可以更精细的控制对象的构造流程。 也就是将一个对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 二&…

表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序

目录 表白墙引入数据库 再谈Cookie和session 得到Cookie ​编辑 设置Cooie 使用Cookie编写一个登入的小界面 表白墙引入数据库 1.先引入数据库的依赖&#xff08;驱动包&#xff09;&#xff0c;5.1.49 pom.xml中&#xff0c;在之前的两个之前&#xff0c;再去添加一个 &…

【Windows 开发环境配置——NVIDIA 篇】CUDA、cuDNN、TensorRT 三件套安装

CUDA 从CUDA Toolkit Archive下载相应版本的离线安装包&#xff0c;这里以11.7为例。 打开安装包&#xff0c;在安装选项选择自定义模式&#xff0c;点击下一步。 在自定义安装选项中&#xff0c;仅选择CUDA组件&#xff08;其中Nsight相关组件用于代码调试与性能分析&#xff…

c# 虚方法

c#虚方法 namespace ConsoleApp2 {/// <summary>/// 若一个实例方法的声明中含有virtual修饰符&#xff0c;则称该方法为虚方法。/// 若其中没有virtual修饰符&#xff0c;则称该方法为非虚方法///虚方法可以在派生类中重写。当某个实例方法声明包括override修饰符时&am…

HarmonyOS分布式文件系统开发指导

分布式文件系统概述 分布式文件系统&#xff08;hmdfs&#xff0c;HarmonyOS Distributed File System&#xff09;提供跨设备的文件访问能力&#xff0c;适用于如下场景&#xff1a; 两台设备组网&#xff0c;用户可以利用一台设备上的编辑软件编辑另外一台设备上的文档。平板…

Vue3中TSX的使用方式

第一步&#xff1a;安装插件 npm install vitejs/plugin-vue-jsx -D 第二步&#xff1a; 在vite.config.ts中进行引入插件和注册插件 import { fileURLToPath, URL } from node:urlimport { defineConfig } from vite import vue from vitejs/plugin-vue import vueJsx from…

CKA认证模块②-K8S企业运维和落地实战-2

CKA认证模块②-K8S企业运维和落地实战-2 K8S常见的存储方案及具体应用场景分析 k8s存储-empty emptyDir类型的Volume是在Pod分配到Node上时被创建&#xff0c;Kubernetes会在Node上自动分配一个目录&#xff0c;因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容…

从测试的角度看待南航机票bug事件

事件描述 11月8日晚间&#xff0c;多名消费者反映南方航空多条成都进出港航线票价&#xff08;不含机建燃油费&#xff09;低至10元、20元、30元不等。上述超低价机票不仅在南方航空App可以购买&#xff0c;多家在线旅游平台也都能抢到。 11月9日&#xff0c;南航官方发布公告…

计算机网络之网络体系结构

计算机网络体系结构 一、常见的计算机体系结构 1.1 OSI标准以及TCP/IP体系结构 OSI标准失败的原因&#xff1a; OSI的专家们缺乏实际经验&#xff0c;他们在完成OSI标准时没有商业驱动力OSI的协议实现起来过分复杂&#xff0c;而且运行效率很低OSI标准的制定周期太长&#x…

css:文本对齐属性vertical-align实现化学元素上标下标的显示

文档 https://developer.mozilla.org/zh-CN/docs/Web/CSS/vertical-align 语法 vertical-align: <value>;可选值&#xff1a; sub&#xff1a;使元素的基线与父元素的下标基线对齐。 super&#xff1a;使元素的基线与父元素的上标基线对齐。 text-top&#xff1a;使…

2023年行业寒冬-运维求职建议

由于前几个月裁员&#xff0c;近期到就业市场上寻找工作&#xff0c;BOSS刷了两三个月&#xff0c;都已经刷烂了&#xff0c;翻来覆去还是那几家公司在招人&#xff0c;面试也有&#xff0c;但很多面试基本就是走个流程&#xff0c;对方也直言候选人很多&#xff0c;需要多加比…