千家信息网

如何在SpringBoot中实现统一异常处理

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了如何在SpringBoot中实现统一异常处理的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在SpringBoot中实现统一异常处理文章都会有所收获,
千家信息网最后更新 2026年11月03日如何在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安全错误 数据库的锁怎样保障安全 咖啡网 深圳市人人互联网科技有限公司 深圳互联网科技公司 互联网科技革命 火传媒上海互联网科技 互联网科技网站 互联网金融监管科技 成都仁贤领冠互联网科技有限公司 中盈科技互联网信息有限公司 互联网金融科技公司干啥的 恒生互联网科技指数跳水 速维有品互联网信息科技(苏州)有限公司 广州市恰铎互联网科技有限公司 互联网在线教育科技创业 互联网科技快讯热点 互联网科技手抄报图片 唐山双旺合互联网科技产业园 杭州科技互联网公司有哪些 六子台科技互联网展会 前海云享互联网科技 上海喔噻互联网科技有限公司 亿人帮互联网科技有限公司 互联网科技巨头监管 科技制造互联网公司 苏州大垚互联网科技 互联网金融 科技创新 互联网科技论坛 互联网科技公司名称 广州百诚互联网科技有限公司官网 富国互联网金融科技混合基金
0