如何在SpringBoot中实现统一异常处理
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章主要介绍了如何在SpringBoot中实现统一异常处理的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在SpringBoot中实现统一异常处理文章都会有所收获,
千家信息网最后更新 2025年02月22日如何在SpringBoot中实现统一异常处理
这篇文章主要介绍了如何在SpringBoot中实现统一异常处理的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在SpringBoot中实现统一异常处理文章都会有所收获,下面我们一起来看看吧。
场景:针对异常处理,我们原来的做法是一般在最外层捕获异常即可,例如在Controller中
@Controllerpublic class HelloController { private static final Logger logger = LoggerFactory.getLogger(HelloController.class); @GetMapping(value = "/hello") @ResponseBody public Result hello() { try { //TODO 具体的逻辑省略…… } catch (Exception e) { logger.error("hello接口异常={}", e); return ResultUtil.success(-1, "system error", null); } return ResultUtil.success(0, "success", null); }}
这样的话也能解决部分问题,但是无法获取到自己指定的异常,引入全局统一异常处理的话将会极大的改善代码,减少冗余代码的产生。
自定义异常类:注意要继承自RuntimeException而不是Exception,继承自Exception的话,当抛出自定义异常时spring事务不会回滚
public class GlobalException extends RuntimeException { private Integer code; //因为我需要将异常信息也返回给接口中,所以添加code区分 public GlobalException(Integer code,String message) { super(message); //把自定义的message传递个异常父类 this.code = code; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; }}
自定义统一异常处理器:比较关键的两个注解@ControllerAdvice、@ExceptionHandler
@ControllerAdvicepublic class ExceptionHandle { @ResponseBody //因为我需要将抛出的异常返回给接口,所以加上此注解 @ExceptionHandler public Result handle(Exception e) { if (e instanceof GlobalException) { GlobalException ge = (GlobalException) e; return ResultUtil.success1(ge.getCode(), ge.getMessage()); } return ResultUtil.success1(-1, "system error!"); } }
写个测试类测试下
@GetMapping(value = "/hello1")@ResponseBodypublic Result hello(@RequestParam(value = "age", defaultValue = "50", required = false) Integer age) throws GlobalException { if (age < 10) { throw new GlobalException(ConstantEnum.LESS10.getCode(), ConstantEnum.LESS10.getMsg()); } else if (age > 50) { throw new GlobalException(ConstantEnum.MORE50.getCode(), ConstantEnum.MORE50.getMsg()); } else { return ResultUtil.success1(0, "success"); }}
把code、message封装在了ConstantEnum枚举里面,方便统一维护
public enum ConstantEnum { ERROR(-1, "system error!"), SUCCESS(100, "success"), LESS10(101, "自定义异常信息-我小于10岁"), MORE50(5001, "自定义异常信息-我大于50岁"); private Integer code; private String msg; public Integer getCode() { return code; } public String getMsg() { return msg; } ConstantEnum(Integer code, String msg) { this.code = code; this.msg = msg; }}
关于"如何在SpringBoot中实现统一异常处理"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"如何在SpringBoot中实现统一异常处理"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
处理
统一
中实
信息
接口
知识
代码
内容
注解
篇文章
测试
这样的话
两个
事务
价值
做法
全局
关键
冗余
场景
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
面试官问你熟悉什么数据库
宝信软件开发业务
南京电话软件开发供应商
通州区技术软件开发服务保障
软件开发人力成本占比
青少年网络安全教学第四课
2021中国网络安全报告
java论文答辩数据库问题
渠道网络技术有限公司
行人检测视频数据库
数据库返回当天周几
法国法律数据库
网络技术及应用基础知识
电气软件开发公司
服务器配套键盘
泰安安卓软件开发哪家便宜
软件开发如何进行可行性分析
软件开发五行属哪
加强网络安全的信息稿件
上海尚肯互联网科技
网络安全认证体系
江门网站优化软件开发
R720服务器有u2直连接口吗
成都计算机软件开发靠谱吗
日增量百万数据库架构
流星群侠传服务器维护中
幼儿园网络安全制度范本
vue 软件开发者
软件开发技术专业是什么
360网络安全工程师专业