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

spring boot的统一异常处理,使用@RestControllerAdvice

@RestControllerAdviceSpring 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.propertiesapplication.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 中用于全局异常处理的注解&#xff0c;它结合了 ControllerAdvice 和 ResponseBody 的功能。这意味着使用 RestControllerAdvice 注解的类将应用于所有 RequestMapping 方法&#xff0c;并且任何从这些方法返回的对象都会被转换为 HTTP 响…...

OFCA-OpenHarmony课后习题答案

本文是 OFCA-OpenHarmony 认证模拟考试的习题答案&#xff0c;涵盖 OpenHarmony 的多内核设计、权限申请、通知发布、系统线程、启动过程、分布式软总线、模块导入、文件管理、公共事件等多个方面。每道题目均提供了详细的选择项和正确答案&#xff0c;旨在帮助考生熟悉考试内容…...

Open AI 推出 ChatGPT Pro

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

利用PHP和GD库实现图片切割

利用PHP和GD库实现图片切割的详细步骤如下&#xff1a; 一、检查GD库是否安装 确保服务器上已经安装了PHP和GD库。可以使用phpinfo()函数来检查GD库是否已经安装和启用。 二、加载原始图片 使用PHP提供的imagecreatefromjpeg()、imagecreatefrompng()或imagecreatefromgif(…...

【css】基础(一)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;css专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &a…...

springboot415社区网格化管理平台的构建-(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本社区网格化管理平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…...

如何在 Ubuntu 上安装开源监控工具 Uptime Kuma

简介 Uptime Kuma&#xff08;或简称 Kuma&#xff09;是一个开源监控工具&#xff0c;用于监控 HTTP、HTTPS、DNS 等协议的服务。Uptime Kuma 提供多种功能&#xff0c;如多语言支持、多个状态页面、代理支持等。 接下来&#xff0c;我将一步一步教大家如何进行安装和部署&am…...

复习 part one

synchronized 和 ReentrantLock的区别 synchronized 和 ReentrantLock 都是 Java 中提供的可重入锁&#xff0c;二者的主要区别有以下 5 个&#xff1a; 用法不同&#xff1a;synchronized 可以用来修饰普通方法、静态方法和代码块&#xff0c;而 ReentrantLock 只能用于代码块…...

【工业机器视觉】基于深度学习的水表盘读数识别(3-数据标注与转换)

【工业机器视觉】基于深度学习的仪表盘识读&#xff08;2&#xff09;-CSDN博客 数据标注 标注扩展 Labelme 和 LabelImg 都是用于创建机器学习和计算机视觉项目所需标注数据的工具。它们都允许用户通过图形界面手动标注图像&#xff0c;但各自有其特点和适用场景。 Labelme…...

python数据分析之爬虫基础:selenium详细讲解

目录 1、selenium介绍 2、selenium的作用&#xff1a; 3、配置浏览器驱动环境及selenium安装 4、selenium基本语法 4.1、selenium元素的定位 4.2、selenium元素的信息 4.3、selenium元素的交互 5、Phantomjs介绍 6、chrome handless模式 1、selenium介绍 &#xff08;1…...

Tips--解决esptool经pyinstaller打包后无法使用的问题

esptool打包后失效解决方法 问题1原因解决方法问题2原因解决方法 问题1 esptool经过pyinstaller打包成exe后&#xff0c;提示错误&#xff1a;Stub flasher JSON file for esp32 not found 原因 pyinstaller在进行esptool打包的时候&#xff0c;通常不用讲Stub flaser Json文…...

Apache DolphinScheduler 限制秒级别的定时调度

背景 Apache DolphinScheduler 定时任务配置采用的 7 位 Crontab 表达式&#xff0c;分别对应秒、分、时、月天、月、周天、年。 在团队日常开发工作中&#xff0c;工作流的定时调度一般不会细化到秒级别。但历史上出现过因配置的疏忽大意而产生故障时间&#xff0c;如应该配…...

Oracle 数据库创建用户并分配只读的权限

引言 在 Oracle 数据库的日常运维和开发过程中&#xff0c;用户管理是确保数据安全与访问控制的关键环节。通过合理创建用户并分配适当的权限&#xff0c;可以有效防止未授权的访问和操作。本文将详细介绍如何在 Oracle 数据库中&#xff1a; 创建新用户并设置复杂密码。授予…...

2个GitHub上最近比较火的Java开源项目

1. SpringBlade 微服务架构 标题 SpringBlade 微服务架构 摘要 SpringBlade 是一个由商业级项目升级优化而来的微服务架构&#xff0c;采用Spring Boot 3.2、Spring Cloud 2023等核心技术构建&#xff0c;遵循阿里巴巴编码规范&#xff0c;提供基于React和Vue的两个前端框架&am…...

【jvm】为什么要有GC

目录 1. 自动内存管理2. 提升程序稳定性3. 优化性能4. 跨平台能力5. 分代回收策略 1. 自动内存管理 1.JVM中的GC机制负责自动管理内存&#xff0c;这意味着开发人员不需要手动分配和释放内存。2.这一特性大大简化了Java程序的内存管理&#xff0c;降低了内存泄漏和内存溢出等问…...

【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

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们今天会再开一个系列&#xff0c;那就是蓝桥杯系列&#xff0c;我们会从最基础的开始讲起&#xff0c;大家想要备战明年蓝桥杯的&#xff0c;让我们一起加油。 工具安装 DevC…...

NanoLog起步笔记-1

nonolog起步笔记-1 背景与上下文写在前面Nanolog与一般的实时log的异同现代log的一般特性Nanolog的选择 背景与上下文 因为工作中用到了NanoLog。有必要研究一下。 前段时间研究了许多内容&#xff0c;以为写了比较详实的笔记&#xff0c;今天找了找&#xff0c;不仅笔记没找到…...

汽车车牌标记支持YOLO,COCO,VOC三种格式标记,4000张图片的数据集

本数据集支持YOLO&#xff0c;COCO&#xff0c;VOC三种格式标记汽车车牌&#xff0c;无论是新能源汽车还是油车都能识别标记&#xff0c;该数据集一共包含4000张图片 数据集分割 4000总图像数 训练组 70&#xff05; 2800图片 有效集 20&#xff05; 800图片 测…...

leetcode33.搜索旋转排序数组

整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], ..., nums[n-1], nums[0], nums[1], ..…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...