前言

开发的时候,每个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:(九)统一异常处理相关推荐

  1. 基于spring boot的统一异常处理

    基于spring boot的统一异常处理 参考文章: (1)基于spring boot的统一异常处理 (2)https://www.cnblogs.com/knyel/p/7804237.html 备 ...

  2. quartz集成到springboot_一个用来学习 spring boot 的开源项目,总共包含 57 个集成demo...

    spring-boot-demo 一个用来学习 spring boot 的项目,总共包含 57 个集成demo. 包含集成 actuator(监控).admin(可视化监控).logback(日志). ...

  3. springboot 拦截器 日志_跟武哥一起学习Spring Boot,一份全面详细的学习教程

    SpringBoot现在已经是企业开发项目的标准框架,至少新项目一般都会使用SpringBoot框架,发现有一个SpringBoot的笔记写的非常好,非常全面, 也非常认真,即使你对SpringBoo ...

  4. Spring Boot入门——全局异常处理

    Spring Boot入门--全局异常处理 参考文章: (1)Spring Boot入门--全局异常处理 (2)https://www.cnblogs.com/studyDetail/p/702758 ...

  5. Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获

    Spring boot异常统一处理方法:@ControllerAdvice注解的使用.全局异常捕获.自定义异常捕获 参考文章: (1)Spring boot异常统一处理方法:@ControllerAd ...

  6. 2小时学习Spring Boot 2019版本 代码一样推送至github上面去

    简介:<2小时学习Spring Boot>后续进阶课程,主要讲述了Spring Boot针对Web方面的相关技巧 讲师实战课程<Spring Boot微信点餐系统> http: ...

  7. 学习Spring Boot:(二十六)使用 RabbitMQ 消息队列

    前言 前面学习了 RabbitMQ 基础,现在主要记录下学习 Spring Boot 整合 RabbitMQ ,调用它的 API ,以及中间使用的相关功能的记录. 相关的可以去[我的博客/Rabbit ...

  8. 学习Spring Boot:(二十五)使用 Redis 实现数据缓存

    前言 由于 Ehcache 存在于单个 java 程序的进程中,无法满足多个程序分布式的情况,需要将多个服务器的缓存集中起来进行管理,需要一个缓存的寄存器,这里使用的是 Redis. 正文 当应用程序 ...

  9. 学习Spring Boot:(一)入门

    微服务 微服务其实是服务化思路的一种最佳实践方向,遵循SOA(面向服务的架构)的思路,各个企业在服务化治理上面的道路已经走得很远了,整个软件交付链上各个环节的基础设施逐渐成熟了,微服务就诞生了. 微服 ...

  10. 注解参数获取不到_scm-springboot基于spring boot的统一注解缓存

    scm-springboot 基于spring boot的统一注解缓存,支持mencached.redis.ehcache的缓存无缝切换.支持单个缓存设置过期时间,灵活的key设置规则,采用fastj ...

最新文章

  1. Linux下命令执行顺序控制与管道
  2. “CCF传播大使”招募公告,期待你的加入!
  3. Linux_系统时间管理
  4. NHibernate中,查询SqlServer数据库多个实体对象
  5. 2013年第四届蓝桥杯C/C++ A组国赛 —— 第一题:填算式
  6. 程序员该如何向奶奶解释 SQL 和 NoSQL?
  7. C#显示当前日期时间
  8. nginx动态php转发,Nginx 动态 upstreams 实现,nginxupstreams_PHP教程
  9. numpy array和python list_Python list与NumPy array 区分详解
  10. 计算机竞赛acm试题,ACM-ICPC 2018 总决赛赛题
  11. 单职业传奇私脱机辅助制作视频教程
  12. 第4章:图数据处理管道
  13. 微信聊天记录的图片在哪查看
  14. p2p与反p2p的博弈,一劳永逸真的不容易么
  15. ZOOMIT的使用方法
  16. Spring系列04德鲁伊连接池配置
  17. java socket 聊天室_java利用Socket实现聊天室功能实例
  18. 会讲话是学问,会听话是学问
  19. linux语言是什么意思,linux怎么读(linux什么意思,准确发音是什么)
  20. 计算机二级考试电子表真题,全国计算机等级考试电子表格题目

热门文章

  1. c++ scanf读取_使用scanf()读取内存地址并在C中打印其值
  2. shell中返回值是1为真还是假_shell脚本中判断上一个命令是否执行成功
  3. hashmap转红黑树的阈值为8_面试必考的 HashMap,这篇总结到位了
  4. Java Double类shortValue()方法与示例
  5. java程序员个人能力介绍_Java操作员能力问题
  6. next和hasnext_使用Java中的next()和hasNext()方法遍历List元素
  7. 图片人脸检测——OpenCV版(二)
  8. Android studio小问题解决
  9. python爬虫 asyncio aiohttp aiofiles 单线程多任务异步协程爬取图片
  10. java hs err pid_JAVA 奔溃 生成hs_err_pid****的文件,求大神看看