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 ...
随机推荐
- 【大数据】虚拟机-Ubuntu环境
目标 1.宿主机器能相互访问 2.虚拟机能访问互联网 方法 1.VMWare--编辑---虚拟网络编辑器,选择宿主机上网网卡 2.虚拟机设置-网络适配器 3.宿主机网络设置查看 4.Ubuntu网络设 ...
- wordpress站点更换域名了如何快速设置
有时我们的wordpress站点因为各种原因需要更换域名了,如何快速设置让网站直接用新域名而不受影响呢?比如旧域名是a.com,新域名为b.com,下面这段sql代码很有用 UPDATE wp_opt ...
- async await 总结
1.async await成对出现,await再async定义的函数内 2.async定义的是函数 3.async 返回一个Promise 4.async 函数中 return 的结果将作为回调的参数 ...
- uiwebview 离线缓存 图片
uiwebview 离线缓存图片
- [POJ3468]关于整数的简单题 (你想要的)树状数组区间修改区间查询
#include <cstdio> #include <algorithm> #include <cstring> #include <cctype> ...
- [转载] miller rabin
本文转载自https://www.cnblogs.com/zsq259/p/11602175.html Miller-Rabin 事先声明,因为菜鸡Hastin知识水平有限就是菜,因此语言可能不是特别 ...
- BZOJ 3048: [Usaco2013 Jan]Cow Lineup 双指针
看到这道题的第一个想法是二分+主席树(好暴力啊) 实际上不用这么麻烦,用一个双指针+桶扫一遍就行了 ~ code: #include <bits/stdc++.h> #define N 1 ...
- Presto Infrastructure at Lyft
转载一篇关于 lyft presto 平台建设的实践 Overview Early in 2017 we started exploring Presto for OLAP use cases and ...
- REdis一致性方案探讨
REdis功能强大众所周知,能够大幅简化开发和提供大并发高性能,但截止到REdis-5.0.5仍然存在如下几大问题: 一致性问题 这是由于REdis的主从复制采用的是异步复制,异常时可能发生主节点的数 ...
- 网卡可以绑定cpu提高吞吐量
请看大神帖子:https://blog.csdn.net/nawenqiang/article/details/82854929 需要做什么呢? 首先,确认你是否运行irqbalance,这个是nic ...