学习Spring Boot:(九)统一异常处理
前言
开发的时候,每个controller的接口都需要进行捕捉异常的处理,以前有的是用切面做的,但是SpringMVC中就自带了@ControllerAdvice
,用来定义统一异常处理类,在 SpringBoot 中额外增加了 @RestControllerAdvice
。
使用
创建全局异常处理类
通过使用 @ControllerAdvice
或者 @RestControllerAdvice
定义统一的异常处理类。
在方法的注解上加上 @ExceptionHandler
用来指定这个方法用来处理哪种异常类型,然后处理完异常,将相关的结果返回。
@RestControllerAdvice
public class ExceptionHandler {/*** logger*/private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionHandler.class);/*** 处理系统自定义的异常** @param e 异常* @return 状态码和错误信息*/@org.springframework.web.bind.annotation.ExceptionHandler(KCException.class)public ResponseEntity<String> handleKCException(KCException e) {LOGGER.error(e.getMessage(), e);return ResponseEntity.status(e.getCode()).body(e.getMessage());}@org.springframework.web.bind.annotation.ExceptionHandler(DuplicateKeyException.class)public ResponseEntity<String> handleDuplicateKeyException(DuplicateKeyException e) {LOGGER.error(e.getMessage(), e);return ResponseEntity.status(HttpStatus.CONFLICT).body("数据库中已存在该记录");}@org.springframework.web.bind.annotation.ExceptionHandler(AuthorizationException.class)public ResponseEntity<String> handleAuthorizationException(AuthorizationException e) {LOGGER.error(e.getMessage(), e);return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("没有权限,请联系管理员授权");}/*** 处理异常** @param e 异常* @return 状态码*/@org.springframework.web.bind.annotation.ExceptionHandler(Exception.class)public ResponseEntity<String> handleException(Exception e) {LOGGER.error(e.getMessage(), e);return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();}
}
测试
我在 controller 写了一个新增的方法,由于我的数据库中设置了 username 字段唯一索引,所以相同的值添加第二次的时候,肯定会抛出上面方法中的第二个异常 DuplicateKeyException
:
@PostMapping()public ResponseEntity insert(@RequestBody SysUserEntity user) {sysUserService.save(user);return ResponseEntity.status(CREATED).build();}
第一次新增的时候:
第二次新增的时候返回异常信息:
学习Spring Boot:(九)统一异常处理相关推荐
- 基于spring boot的统一异常处理
基于spring boot的统一异常处理 参考文章: (1)基于spring boot的统一异常处理 (2)https://www.cnblogs.com/knyel/p/7804237.html 备 ...
- quartz集成到springboot_一个用来学习 spring boot 的开源项目,总共包含 57 个集成demo...
spring-boot-demo 一个用来学习 spring boot 的项目,总共包含 57 个集成demo. 包含集成 actuator(监控).admin(可视化监控).logback(日志). ...
- springboot 拦截器 日志_跟武哥一起学习Spring Boot,一份全面详细的学习教程
SpringBoot现在已经是企业开发项目的标准框架,至少新项目一般都会使用SpringBoot框架,发现有一个SpringBoot的笔记写的非常好,非常全面, 也非常认真,即使你对SpringBoo ...
- Spring Boot入门——全局异常处理
Spring Boot入门--全局异常处理 参考文章: (1)Spring Boot入门--全局异常处理 (2)https://www.cnblogs.com/studyDetail/p/702758 ...
- Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获
Spring boot异常统一处理方法:@ControllerAdvice注解的使用.全局异常捕获.自定义异常捕获 参考文章: (1)Spring boot异常统一处理方法:@ControllerAd ...
- 2小时学习Spring Boot 2019版本 代码一样推送至github上面去
简介:<2小时学习Spring Boot>后续进阶课程,主要讲述了Spring Boot针对Web方面的相关技巧 讲师实战课程<Spring Boot微信点餐系统> http: ...
- 学习Spring Boot:(二十六)使用 RabbitMQ 消息队列
前言 前面学习了 RabbitMQ 基础,现在主要记录下学习 Spring Boot 整合 RabbitMQ ,调用它的 API ,以及中间使用的相关功能的记录. 相关的可以去[我的博客/Rabbit ...
- 学习Spring Boot:(二十五)使用 Redis 实现数据缓存
前言 由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis. 正文 当应用程序 ...
- 学习Spring Boot:(一)入门
微服务 微服务其实是服务化思路的一种最佳实践方向,遵循SOA(面向服务的架构)的思路,各个企业在服务化治理上面的道路已经走得很远了,整个软件交付链上各个环节的基础设施逐渐成熟了,微服务就诞生了. 微服 ...
- 注解参数获取不到_scm-springboot基于spring boot的统一注解缓存
scm-springboot 基于spring boot的统一注解缓存,支持mencached.redis.ehcache的缓存无缝切换.支持单个缓存设置过期时间,灵活的key设置规则,采用fastj ...
最新文章
- Linux下命令执行顺序控制与管道
- “CCF传播大使”招募公告,期待你的加入!
- Linux_系统时间管理
- NHibernate中,查询SqlServer数据库多个实体对象
- 2013年第四届蓝桥杯C/C++ A组国赛 —— 第一题:填算式
- 程序员该如何向奶奶解释 SQL 和 NoSQL?
- C#显示当前日期时间
- nginx动态php转发,Nginx 动态 upstreams 实现,nginxupstreams_PHP教程
- numpy array和python list_Python list与NumPy array 区分详解
- 计算机竞赛acm试题,ACM-ICPC 2018 总决赛赛题
- 单职业传奇私脱机辅助制作视频教程
- 第4章:图数据处理管道
- 微信聊天记录的图片在哪查看
- p2p与反p2p的博弈,一劳永逸真的不容易么
- ZOOMIT的使用方法
- Spring系列04德鲁伊连接池配置
- java socket 聊天室_java利用Socket实现聊天室功能实例
- 会讲话是学问,会听话是学问
- linux语言是什么意思,linux怎么读(linux什么意思,准确发音是什么)
- 计算机二级考试电子表真题,全国计算机等级考试电子表格题目
热门文章
- c++ scanf读取_使用scanf()读取内存地址并在C中打印其值
- shell中返回值是1为真还是假_shell脚本中判断上一个命令是否执行成功
- hashmap转红黑树的阈值为8_面试必考的 HashMap,这篇总结到位了
- Java Double类shortValue()方法与示例
- java程序员个人能力介绍_Java操作员能力问题
- next和hasnext_使用Java中的next()和hasNext()方法遍历List元素
- 图片人脸检测——OpenCV版(二)
- Android studio小问题解决
- python爬虫 asyncio aiohttp aiofiles 单线程多任务异步协程爬取图片
- java hs err pid_JAVA 奔溃 生成hs_err_pid****的文件,求大神看看