Spring Boot RestControllerAdvice的用法

Spring Boot 使用@RestControllerAdvice实现捕获全局异常统一处理 1GlobalExceptionHandler 捕获全局异常统一处理器。 package com.handler; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; /** * 捕获全局异常统一处理器 */ @RestControllerAdvice pu. 阅读详情

在Spring Boot中,应该用RestControllerAdvice 来统一异常处理

在做前后端分离的项目时,后端通常都会拆分成多个独立的微服务,这时候就会涉及每个服务返回给前端的数据格式问题了。下面就来实现一个比较常用的数据格式,统一所有服务的返回值格式。
一般返回的数据格式会包括4个部分,第一部分: 请求处理是否成功,第二部分:服务处理结果编码,第三部分:编码对应的文本信息,第四部分:返回值。如下所示:

{
“result”: true,
“code”: 1000,
“message”: “SUCCESS”,
“data”: {
“lantian”: 17,
“qingfen”: 16,
“baiyun”: 18
}
}
对于异常处理情况,我们也需要统一成上面的格式。如果我们在controller中通过try catch来处理异常的话,会出现一个问题就是每个函数里都加一个Try catch,代码会变的很乱。下面我们就通过spring boot的注解来省略掉controller中的try-catch 帮助我们来封装异常信息并返回给前端,这样用户也不会得到一些奇奇怪怪的错误提示。

{
“result”: false,
“code”: 3000,
“message”: “THIS IS AN UNKNOW EXCEPTION”,
“data”: null
}
1:定义返回值结构信息(get, set函数省略)
public class CallResultMsg {
private boolean result;
private int code;
private String message;
private T data;
}
2:定义返回值和对应code的信息(get, set函数省略)
public enum CodeAndMsg {
SUCCESS(1000, “SUCCESS”),
METHODFAIL(2000, “ENCOUNTER AN ERROR WHEN EXECUTE METHOD”),
UNKNOWEXCEPTION(3000, “THIS IS AN UNKNOW EXCEPTION”);

private int code;
private String msg;

CodeAndMsg(int code, String msg){
    this.code = code;
    this.msg = msg;
}

}
3:自定义异常
对于一些特别的异常,我们可以自定义Exception和Error Code,这里自定义一个异常(需要继承RuntimeException)

public class UserDefinedException extends RuntimeException {
private CodeAndMsg exception;

public UserDefinedException(CodeAndMsg exception){
    this.exception = exception;
}

public CodeAndMsg getException() {
    return exception;
}

public void setException(CodeAndMsg exception) {
    this.exception = exception;
}

}
4:RestControllerAdvice来捕获全局异常,
@RestControllerAdvice都是对Controller进行增强的,可以全局捕获spring mvc抛的异常。
@ExceptionHandler(value = Exception.class)
ExceptionHandler的作用是用来捕获指定的异常。

@RestControllerAdvice(annotations = RestController.class)
public class UniformReponseHandler {

@ResponseStatus(HttpStatus.OK)
public CallResultMsg sendSuccessResponse(){
    return new CallResultMsg(true, CodeAndMsg.SUCCESS, null);
}

@ResponseStatus(HttpStatus.OK)
public CallResultMsg sendSuccessResponse(T data) {
    return new CallResultMsg(true, CodeAndMsg.SUCCESS, data);
}

@ExceptionHandler(UserDefinedException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public CallResultMsg sendErrorResponse_UserDefined(Exception exception){
    return new CallResultMsg(false, ((UserDefinedException)exception).getException(), null);
}

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public CallResultMsg sendErrorResponse_System(Exception exception){
    if (exception instanceof UserDefinedException) {
        return this.sendErrorResponse_UserDefined(exception);
    }

    return new CallResultMsg(false, CodeAndMsg.UNKNOWEXCEPTION, null);
}

}
通过上面的一波操作,我们的controller中就不需要再去写大量的try-catch了,RestControllerAdvice会自动帮助catch,并匹配相应的ExceptionHandler,然后重新封装异常信息,返回值,统一格式返回给前端。

5:ControllerAdvice 和 RestControllerAdvice的区别
@ControllerAdvice 和 @RestControllerAdvice都是对Controller进行增强的,可以全局捕获spring mvc抛的异常。
RestControllerAdvice = ControllerAdvice + ResponseBody
6:测试统一异常捕获功能

@GetMapping("/doTestObject")
public CallResultMsg testObjectReturn(){
Map<String, Integer> map = new HashMap();
map.put(“qingfen”, 16);
map.put(“lantian”, 17);
map.put(“baiyun”, 18);
return new UniformReponseHandler().sendSuccessResponse(map);
}

@GetMapping("/doTestException/{x}")
public int testExceptionResturn(@PathVariable int x){
if (0 < x && x < 10){
throw new UserDefinedException(CodeAndMsg.METHODFAIL);
} else {
return 1/0;
}
}
返回结果:

{
“result”: true,
“code”: 1000,
“message”: “SUCCESS”,
“data”: {
“lantian”: 17,
“qingfen”: 16,
“baiyun”: 18
}
}
{
“result”: false,
“code”: 2000,
“message”: "ENCOUNTER AN ERROR WHEN EXECUTE METHOD ",
“data”: null
}

Spring Boot整合Spring Security实现JWT无状态认证实战指南 在微服务架构和前后端分离的现代Web开发中,认证与授权是保障系统安全的核心环节。传统的基于Session的认证方式在分布式场景下面临扩展性和跨域挑战,因此无状态认证方案应运而生。JWT(JSON Web Token)作为一种开放标准,通过将用户信息编码为JSON对象并签名,实现了安全、自包含的身份凭证传输。其技术价值在于彻底解耦了服务端会话状态,显著提升了系统的可扩展性和跨域支持能力,尤其适用于RESTful API和微服务间的安全通信。结合Spring Security这一强大的Java安全框架,开发者可 阅读详情

相关推荐

SpringBoot中@ControllerAdvice/@RestControlAdvice+@ExceptionHandler实现全局异常捕获与处理

在编写Controller接口时,为避免接口因为未知的异常导致返回不友好的结果和提示。如果不进行全局异常捕获则需要对每个接口进行try-catch或其他操作。可以对Controller进行全局的异常捕获和处理,一旦发生异常,则返回通用的500响应码与通用错误提示。并将异常发生的具体的文件、类、方法、行数信息记录到日志。@ControllerAdvice,是Spring3.2提供的新注解,它是一个Controller增强器,

BADAO_LIUMANG_QIZHI的博客 4401

SpringBoot常用注解@RestControllerAdvice

@RestControllerAdvice是什么 @RestControllerAdvice是一个组合注解,由@ControllerAdvice、@ResponseBody组成,而@ControllerAdvice继承了@Component,因此@RestControllerAdvice本质上是个Component,用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMapping方法。 @RestControllerAdvi

user2025的博客 7万+

【SpringBoot 4.x 第1节】夯爆了,为什么现在要学 Spring Boot 4.x?从零开始理解版本体系、核心变化与真实项目开发路线(超详解)!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 1万+

springboot的@RestControllerAdvice作用和捕获自定义异常返回自定义结果案例

springboot

qq_36138652的博客 1万+

Spring注解@RestControllerAdvice原理解析

主要介绍了Spring注解@RestControllerAdvice原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

电商秒杀场景下,如何用Redis+Lua脚本实现原子性库存扣减(附完整代码)

本文针对电商秒杀场景下的高并发与超卖难题,详细解析了如何利用Redis的原子性命令与Lua脚本实现可靠的库存扣减。通过对比多种方案,阐述了Redis+Lua作为黄金搭档的技术原理,并提供了从基础扣减到预扣减模型的完整代码实现,确保在高并发下数据的一致性与系统性能。

weixin_29219539的博客 503

Spring Boot:全局异常统一处理之RestControllerAdvice

控制器在处理请求的过程中难免遇到未被捕捉的异常,在Springboot中也可在全局范围内处理未捕捉的异常,使客户端接收到的响应更友好。从``springframework 3.2``版本开始,Spring提供了``@ControllerAdvice``注解,可结合``@ExceptionHandler``注解实现全局异常的捕捉;从``springframework 4.3``版本开始,又提供了``@RestControllerAdvice``注解,可简化``@ControllerAdvice``的声明工作。

Crane的博客 1622

Frenet坐标系下动态街道场景的最优轨迹生成

本文详细解读了Lattice Planner

BigDavid123的博客 2393

RestControllerAdvice注解与全局异常处理

从该注解的名字可以看到,这是一个与切面有关的注解,事实上也是如此,我们都知道切面的注解肯定都有个作用范围,切面类的注解只能对其作用范围内的操作,实现切面操作.RestCntrollerAdvice的作用范围是什么呢?

sxlishaobin的博客 393

JMeter 压测实战全教程

脚本结构:测试计划 → 线程组 → HTTP 请求 → 监听器运行方式:图形化调试,命令行生产压测核心指标:QPS、RT、错误率、CPU、GC。

weixin_48309090的博客 652

量化策略缺数据?一份QMT/PTrade免费数据清单与特殊数据源QtFactor评测

本文为量化策略开发者提供QMT和PTrade平台的免费数据资源清单,并深度评测QtFactor在补充特色数据方面的价值。涵盖Tick级数据、Level2行情、资金流向等关键信息,帮助开发者在预算有限的情况下构建高效数据解决方案,特别适合打板策略和日内回转交易。

weixin_29058331的博客 417

spring boot restControllerAdvice 全局异常处理

  在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler、@InitBinder、 @ModelAttribute,并应用到所有@RequestMapping中。参考:@ControllerAdvice 文档 一、介绍 创建 MyControllerAdvice,并添加 @ControllerAdvice注解 pack...

DQchat的博客 7679

vivado2025安装教程:手把手带你完成环境配置

详细讲解vivado2025的安装步骤与环境配置技巧,帮助开发者快速搭建FPGA开发平台。涵盖常见问题解决方案,确保vivado2025稳定运行,提升开发效率。

weixin_42588672的博客 3028

Spring Boot整合Spring Security

Spring Security入门教程,springboot整合Spring Security

沐雨橙风ιε的博客 1296

YOLOv13结合Sobel边缘检测算子,实现EIEM(Edge Information Enhancement Module,边缘信息增强模块),强化空间特征提取

EIEM模块通过巧妙地结合Sobel边缘检测算子和现代卷积网络架构,实现了显式边缘信息增强的创新设计。这种方法不仅提高了网络对边缘特征的敏感性,还保持了良好的计算效率和模块化特性。 从技术实现角度看,EIEM展示了如何将经典计算机视觉算法无缝集成到深度学习框架中,为构建更强大、更可解释的视觉模型提供了新的思路。随着对边缘信息重要性认识的不断深入,以及对网络可解释性需求的增长,EIEM这样的显式特征增强模块将在未来的计算机视觉研究中发挥越来越重要的作用。

FJN110的博客 907

【KingSCADA】如何创建新应用

KingSCADA3.8集成开发环境是基于工程的应用管理模式,实现了对多个应用的集中开发和管理的功能,一个工程可以同时管理多个应用,即在KingSCADA3.8工程设计器中可以同时对多个应用进行开发,应用之间可以实现相互复制、粘贴等功能,大大提高了开发效率。(此处感觉和VS类似)使用KingSCADA3.8开发的系统称为应用,一个完整的应用一般包含以下部分或全部内容:IO设备、IO采集点、图形界面、动画链接、趋势曲线、报警和事件、历史记录、数据库、Web Server等部分。

做有价值的事,积累有价值的笔记! 3109

Spring Boot 2.3.3.RELEASE解决ErrorController的getErrorPath的 @Deprecated,Spring Boot Whitelabel Error

使用背景 微服务项目当请求地址返回404和500异常的时候,希望统一拦截,而不是出现springboot 的Whitelabel Error。 使用方式 在springboot 2.3.0版本之前,可以使用实现ErrorController,然后自定义/error的url返回内容即可 如下图所票 @RestController @RequestMapping("/error") public class JsonErrorController extends AbstractErrorController

bufegar0的博客 4370

7.19华为OD机试真题 新系统 - 物流仓储多维度成本利润综合查询系统 (Java/Py/C/C++/Js/Go)

7.19华为OD机试真题 新系统 - 物流仓储多维度成本利润综合查询系统 (Java/Py/C/C++/Js/Go)

算法大师! 618

Spring Boot 中自定义异常处理

Spring Boot 中自定义异常处理 项目地址https://github.com/helloworlde/SpringBootCollection/tree/master/SpringBoot-Exception Spring Boot 中提供了默认的异常处理,但是对于应用来说,这些信息并不应该直接返回或者不够明确,需要结合自己的情况进行定制 自定义处理异常有两种方式: org.sp...

啦啦啦啦 la 4687

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

技术分享 | Spring Boot 异常处理

我们学习必然是为了找到高薪的工作,下面这些。

NHB234567的博客 839

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

全局异常处理的两种策略:HandlerExceptionResolver和RestControllerAdvice

本文对比了Spring中两种全局异常处理策略:HandlerExceptionResolver和@RestControllerAdvice。HandlerExceptionResolver是Spring底层的异常解析机制,需要手动注册到处理器链中,优先级高且处理范围广,适合框架级异常处理;而@RestControllerAdvice基于注解实现,使用简单,主要处理Controller层异常,适合业务异常处理。两者在触发方式、优先级控制、返回内容和适用场景等方面存在显著差异。HandlerExceptionR

qq_41725967的博客 782

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

十二、springboot 详解RestControllerAdvice(ControllerAdvice)

springboot 详解RestControllerAdvice(ControllerAdvice)拦截异常并统一处理 简介 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface ControllerAdvice { @AliasFo...

Harry的博客 7万+

Spring Boot 使用 Spring Data JPA 实现增删改查

本文介绍了如何使用Spring Boot 3、Spring Data JPA和MySQL实现用户增删改查功能。主要内容包括:技术栈选择(Java 17+、Spring Boot 3.5.x等)、项目创建(通过Spring Initializr)、Maven依赖配置、MySQL数据库设置、application.yml配置文件说明,以及实体类User的创建(包含@Entity注解和唯一约束定义)。文章提供了完整的项目结构和关键代码片段,适合开发者快速上手Spring Data JPA的基本使用。

qq_29029209的博客 308

Spring Boot小白必学:@RestControllerAdvice从零到精通

可以快速创建Spring Boot项目体验这些功能,它的在线编辑器直接内置了运行环境,写完代码一键就能看到效果,特别适合新手练习。我实际使用时发现,不用配置本地Java环境这点真的省心,遇到问题还能随时查看官方示例,学习曲线平缓多了。经过反复实践和总结,终于搞清楚了它的核心用法。今天就以最通俗的方式,分享一下我的学习心得,希望能帮助到同样在入门路上的小伙伴。的组合体,专门为RESTful API设计,省去了我们手动添加@ResponseBody的麻烦。时,都会自动跳转到这个方法处理,返回我们定义好的响应。

SapphireOwl29的博客 681

从零手动搭建Spring Boot项目:深入理解核心机制与工程实践

在Java企业级应用开发中,Spring Boot以其‘约定大于配置’的理念,极大地简化了项目的初始化和配置过程。其核心原理在于通过自动配置机制,根据项目依赖智能地装配Bean,并内嵌了Web服务器,实现了开箱即用的开发体验。这一技术价值在于显著提升了开发效率,降低了项目搭建和维护的复杂度。其应用场景广泛覆盖了Web服务、微服务架构以及数据驱动型应用的后端开发。本文聚焦于手动搭建Spring Boot项目的实践,深入解析了从环境准备、项目骨架创建、POM核心配置到自动配置原理的完整流程,并详细阐述了如何集成

weixin_30697239的博客 363
上一篇: k8s argo 技术资料汇总
下一篇: centos 上 用docker 方式安装yapi
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值