SpringBoot小技巧:统一异常处理
SpringBoot小技巧:统一异常处理
情景描述
对于接口的定义,我们通常会有一个固定的格式,比如:

但是调用方在请求我们的API时把接口地址写错了,就会得到一个404错误,且不同于我们定义的数据格式。
我们需要在发生这种系统错误时也能返回我们自定义的那种格式,就需要定义一个异常处理类,这个类既可以返回统一的格式,也可以统一记录异常日志。
方法
我们在@ExceptionHandler(value = Exception.class)中指明了异常器处理Exception及其子类。JsonResponse是我们返回格式的实体类,当发生异常时,会被封装好并返回给调用方。
@ControllerAdvice
public class GlobalExceptionHandler { private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(value = Exception.class)
@ResponseBody
public JsonResponse defaultErrorHandler(HttpServletRequest request, HttpServletResponse response,Exception e){
logger.error("",e);
JsonResponse jsonResponse = new JsonResponse();
jsonResponse.setMsg(e.getMessage());
//[!] 单独处理运行时异常
if(e instanceof RuntimeException)
jsonResponse.setStatus(500);
else
jsonResponse.setStatus(502);
jsonResponse.setData(null);
return jsonResponse;
}
}
资料
@ControllerAdvice
ControllerAdvice拆分开来就是Controller Advice,关于Advice,前面我们讲解Spring Aop时讲到,其是用于封装一个切面所有属性的,包括切入点和需要织入的切面逻辑。这里ContrllerAdvice也可以这么理解,其抽象级别应该是用于对Controller进行“切面”环绕的,而具体的业务织入方式则是通过结合其他的注解来实现的。@ControllerAdvice是在类上声明的注解,其用法主要有三点:
- 结合方法型注解@ExceptionHandler,用于捕获Controller中抛出的指定类型的异常,从而达到不同类型的异常区别处理的目的;
- 结合方法型注解@InitBinder,用于request中自定义参数解析方式进行注册,从而达到自定义指定格式参数的目的;
- 结合方法型注解@ModelAttribute,表示其标注的方法将会在目标Controller方法执行之前执行。
参考链接
- https://blog.csdn.net/zxfryp909012366/article/details/82955259
- https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/ExceptionHandler.html
- https://blog.csdn.net/kinginblue/article/details/70186586
SpringBoot小技巧:统一异常处理的更多相关文章
- springboot小技巧(转)
一些springboot小技巧.小知识点 初始化数据 我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用Jpa,另外一种是Spring JDBC.两种方式各有区别下面 ...
- SpringBoot(十三):springboot 小技巧
原文出处: 纯洁的微笑 一些springboot小技巧.小知识点. 初始化数据 我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用Jpa,另外一种是Spring JD ...
- SpringBoot小技巧:Jar包换War包
SpringBoot小技巧:Jar包换War包 情景 我们都知道springBoot中已经内置了tomcat,是不需要我们额外的配置tomcat服务器的,但是有时这也可能是我们的一个瓶颈,因为如果我们 ...
- SpringBoot小技巧:修改java可执行jar包内容
SpringBoot小技巧:修改java可执行jar包内容 情景描述 在生产环境中,有时候我们发现了个小bug,开发迅速修改代码后,很多时候我们不得不重新发布一个新的可执行jar包上去替换掉.但是这样 ...
- SpringBoot系列——自定义统一异常处理
前言 springboot内置的/error错误页面并不一定适用我们的项目,这时候就需要进行自定义统一异常处理,本文记录springboot进行自定义统一异常处理. 1.使用@ControllerAd ...
- springboot(十三):springboot小技巧
一些springboot小技巧.小知识点 初始化数据 我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用Jpa,另外一种是Spring JDBC.两种方式各有区别下面 ...
- springboot aop + logback + 统一异常处理 打印日志
1.src/resources路径下新建logback.xml 控制台彩色日志打印 info日志和异常日志分不同文件存储 每天自动生成日志 结合myibatis方便日志打印(debug模式) < ...
- SpringBoot(七)_统一异常处理
我感觉看了这节课,给我的思考还是很多的,感觉受益良多.废话不多说,一起学习. 统一的 外层结构返回 这样利于代码看着也规范,前端处理也统一 # 错误返回 { "code": 1, ...
- SpringBoot统一异常处理后TX-LCN分布式事务无法捕获异常进行回滚
通常我们使用SpringBoot都会进行统一异常处理,例如写一个BaseController,在BaseController里进行统一异常处理,然后其他的Controller都继承BaseContro ...
随机推荐
- 查看spark on yarn的日志和程序状态的方法
转自:https://blog.csdn.net/high2011/article/details/52132646 一.在命令行使用命令查看 (1)查看日志:yarn logs -applicati ...
- Game Based Learning: Why Does it Work?
Forty years of research[i] says yes, games are effective learning tools. People learn from games, an ...
- Spring AOP中JoinPoint的用法
Spring JoinPoint的用法 JoinPoint 对象 JoinPoint对象封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就可以获取到封装了该方法信息的 ...
- bzoj1115&&POJ1704&&HDU4315——阶梯Nim
BZOJ1115 题意:阶梯Nim游戏大意:每个阶梯上有一堆石子,两个人在阶梯上玩推石子游戏.每人可以将某堆的任意多石子向左推一阶,所有的石子都推到阶梯下了即算成功,即不能推的输. 分析:根据阶梯Ni ...
- 第5章 Spring的事务管理
5.1 Spring事务管理概述 5.11 事务管理的核心接口 在Spring的所有jar包中,有一个名spring-tx-4.3.6RELEAS的jar包,是提供事务管理的依赖包.在该包的org.s ...
- cf 1179 C
目录 A B C A 模拟出A不是最大值的情况,存起来. 最多有n个.当A为最大值的时候,后面n-1个数开始循环. 查询分两种情况讨论就行了 #include <bits/stdc++.h> ...
- 【luoguP5490】【模板】扫描线
求\(n\)个矩形的面积并,可以用线段树维护一条垂直于\(y\)轴的直线上被矩形覆盖的长度有多少长,将直线从左往右扫一遍,遇到矩形左边界就+1,遇到右边界就-1,不为\(0\)的位置就表示没有覆盖 不 ...
- for循环的嵌套之小星星。
for循环中如何打印出五行五列的小星星呢? 很明显行列的形式需要用到循环嵌套. 外循环控制行: var str = "" ; for(var i= 1; i <= 5; i ...
- AttributeError: module ‘select’ has no attribute 'epoll’
场景:mac 下导入的 ‘select’ 包 import select,然后在 主函数 中创建的 epoll 对象 epl = select.epoll(),运行报错如下 Traceback (mo ...
- shell 小数比较大小
a=1.6b=6.1c=`echo "$a > $b" | bc`然後,如果 $c 是 1 ,那就成立,否則不成立. 参考: http://ju.outofmemory.cn ...