spring boot的统一异常处理,使用@RestControllerAdvice
@RestControllerAdvice 是 Spring Boot 中用于全局异常处理的注解,它结合了 @ControllerAdvice 和 @ResponseBody 的功能。这意味着使用 @RestControllerAdvice 注解的类将应用于所有 @RequestMapping 方法,并且任何从这些方法返回的对象都会被转换为 HTTP 响应体。
下面是如何使用 @RestControllerAdvice 实现统一异常处理的一个示例:
创建自定义异常类
首先,创建一些自定义异常类来表示不同的错误情况。例如:
public class ResourceNotFoundException extends RuntimeException {public ResourceNotFoundException(String message) {super(message);}
}
定义 API 错误响应格式
为了确保API返回的一致性,可以创建一个标准的错误响应结构,如 ApiError 类:
public class ApiError {private HttpStatus status;private String message;private LocalDateTime timestamp;public ApiError(HttpStatus status, String message, Throwable throwable) {this.status = status;this.message = message;this.timestamp = LocalDateTime.now();}// Getters and Setters...
}
使用 @RestControllerAdvice 创建全局异常处理器
然后,你可以创建一个带有 @RestControllerAdvice 注解的类,用来处理不同类型的异常:
@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(ResourceNotFoundException.class)public ResponseEntity<ApiError> handleResourceNotFoundException(ResourceNotFoundException ex) {ApiError apiError = new ApiError(HttpStatus.NOT_FOUND, ex.getMessage(), ex);return new ResponseEntity<>(apiError, HttpStatus.NOT_FOUND);}@ExceptionHandler(Exception.class)public ResponseEntity<ApiError> handleAllExceptions(Exception ex) {ApiError apiError = new ApiError(HttpStatus.INTERNAL_SERVER_ERROR, "An error occurred", ex);return new ResponseEntity<>(apiError, HttpStatus.INTERNAL_SERVER_ERROR);}// 你可以添加更多特定的 @ExceptionHandler 方法来处理其他类型的异常
}
配置全局异常属性(可选)
你还可以在 application.properties 或 application.yml 文件中配置一些全局的行为,例如是否显示堆栈跟踪信息:
# application.properties
server.error.include-stacktrace=never
或者在 YAML 文件中:
# application.yml
server:error:include-stacktrace: never
通过这种方式,@RestControllerAdvice 提供了一种简洁的方法来集中处理整个应用程序中的异常,确保所有异常都能以一致的方式响应客户端请求。此外,由于它自带了 @ResponseBody 功能,所以特别适合 RESTful Web 服务。
相关文章:
spring boot的统一异常处理,使用@RestControllerAdvice
RestControllerAdvice 是 Spring Boot 中用于全局异常处理的注解,它结合了 ControllerAdvice 和 ResponseBody 的功能。这意味着使用 RestControllerAdvice 注解的类将应用于所有 RequestMapping 方法,并且任何从这些方法返回的对象都会被转换为 HTTP 响…...
OFCA-OpenHarmony课后习题答案
本文是 OFCA-OpenHarmony 认证模拟考试的习题答案,涵盖 OpenHarmony 的多内核设计、权限申请、通知发布、系统线程、启动过程、分布式软总线、模块导入、文件管理、公共事件等多个方面。每道题目均提供了详细的选择项和正确答案,旨在帮助考生熟悉考试内容…...
Open AI 推出 ChatGPT Pro
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
利用PHP和GD库实现图片切割
利用PHP和GD库实现图片切割的详细步骤如下: 一、检查GD库是否安装 确保服务器上已经安装了PHP和GD库。可以使用phpinfo()函数来检查GD库是否已经安装和启用。 二、加载原始图片 使用PHP提供的imagecreatefromjpeg()、imagecreatefrompng()或imagecreatefromgif(…...
【css】基础(一)
本专栏内容为:前端专栏 记录学习前端,分为若干个子专栏,html js css vue等 💓博主csdn个人主页:小小unicorn ⏩专栏分类:css专栏 🚚代码仓库:小小unicorn的代码仓库🚚 &a…...
springboot415社区网格化管理平台的构建-(论文+源码)_kaic
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本社区网格化管理平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据…...
如何在 Ubuntu 上安装开源监控工具 Uptime Kuma
简介 Uptime Kuma(或简称 Kuma)是一个开源监控工具,用于监控 HTTP、HTTPS、DNS 等协议的服务。Uptime Kuma 提供多种功能,如多语言支持、多个状态页面、代理支持等。 接下来,我将一步一步教大家如何进行安装和部署&am…...
复习 part one
synchronized 和 ReentrantLock的区别 synchronized 和 ReentrantLock 都是 Java 中提供的可重入锁,二者的主要区别有以下 5 个: 用法不同:synchronized 可以用来修饰普通方法、静态方法和代码块,而 ReentrantLock 只能用于代码块…...
【工业机器视觉】基于深度学习的水表盘读数识别(3-数据标注与转换)
【工业机器视觉】基于深度学习的仪表盘识读(2)-CSDN博客 数据标注 标注扩展 Labelme 和 LabelImg 都是用于创建机器学习和计算机视觉项目所需标注数据的工具。它们都允许用户通过图形界面手动标注图像,但各自有其特点和适用场景。 Labelme…...
python数据分析之爬虫基础:selenium详细讲解
目录 1、selenium介绍 2、selenium的作用: 3、配置浏览器驱动环境及selenium安装 4、selenium基本语法 4.1、selenium元素的定位 4.2、selenium元素的信息 4.3、selenium元素的交互 5、Phantomjs介绍 6、chrome handless模式 1、selenium介绍 (1…...
Tips--解决esptool经pyinstaller打包后无法使用的问题
esptool打包后失效解决方法 问题1原因解决方法问题2原因解决方法 问题1 esptool经过pyinstaller打包成exe后,提示错误:Stub flasher JSON file for esp32 not found 原因 pyinstaller在进行esptool打包的时候,通常不用讲Stub flaser Json文…...
Apache DolphinScheduler 限制秒级别的定时调度
背景 Apache DolphinScheduler 定时任务配置采用的 7 位 Crontab 表达式,分别对应秒、分、时、月天、月、周天、年。 在团队日常开发工作中,工作流的定时调度一般不会细化到秒级别。但历史上出现过因配置的疏忽大意而产生故障时间,如应该配…...
Oracle 数据库创建用户并分配只读的权限
引言 在 Oracle 数据库的日常运维和开发过程中,用户管理是确保数据安全与访问控制的关键环节。通过合理创建用户并分配适当的权限,可以有效防止未授权的访问和操作。本文将详细介绍如何在 Oracle 数据库中: 创建新用户并设置复杂密码。授予…...
2个GitHub上最近比较火的Java开源项目
1. SpringBlade 微服务架构 标题 SpringBlade 微服务架构 摘要 SpringBlade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot 3.2、Spring Cloud 2023等核心技术构建,遵循阿里巴巴编码规范,提供基于React和Vue的两个前端框架&am…...
【jvm】为什么要有GC
目录 1. 自动内存管理2. 提升程序稳定性3. 优化性能4. 跨平台能力5. 分代回收策略 1. 自动内存管理 1.JVM中的GC机制负责自动管理内存,这意味着开发人员不需要手动分配和释放内存。2.这一特性大大简化了Java程序的内存管理,降低了内存泄漏和内存溢出等问…...
【Rhino】【Python】根据contour创建地形mesh
将surface生成open curve封闭 #codingutf-8 import rhinoscriptsyntax as rs import mathdef adjust_endpoints():# 获取指定图层中的所有曲线all_objects rs.ObjectsByLayer("Level 19")if not all_objects:print("在Level 19图层中未找到对象")return#…...
蓝桥杯软件赛系列---lesson1
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 我们今天会再开一个系列,那就是蓝桥杯系列,我们会从最基础的开始讲起,大家想要备战明年蓝桥杯的,让我们一起加油。 工具安装 DevC…...
NanoLog起步笔记-1
nonolog起步笔记-1 背景与上下文写在前面Nanolog与一般的实时log的异同现代log的一般特性Nanolog的选择 背景与上下文 因为工作中用到了NanoLog。有必要研究一下。 前段时间研究了许多内容,以为写了比较详实的笔记,今天找了找,不仅笔记没找到…...
汽车车牌标记支持YOLO,COCO,VOC三种格式标记,4000张图片的数据集
本数据集支持YOLO,COCO,VOC三种格式标记汽车车牌,无论是新能源汽车还是油车都能识别标记,该数据集一共包含4000张图片 数据集分割 4000总图像数 训练组 70% 2800图片 有效集 20% 800图片 测…...
leetcode33.搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], ..., nums[n-1], nums[0], nums[1], ..…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
