SpringBoot-10-全局异常处理

前言

在项目开发中出现异常时很平常不过的事情,我们处理异常也有很多种方式,可能如下:

public int div(int a ,int b){
   int c=0;
   try{
      c=a/b;
   }catch (Exception ex){
       ex.printStackTrace();
   }
   return  c;
}

如果我们这样处理异常,代码中就会出现特别多的异常处理模块,这样代码就会变得可读性非常差,而且业务模块逻辑会夹杂特别多的非业务逻辑。但是在项目开发的过程中我们应该将主要精力放在业务模块,除了必要的异常处理模块最好不要再包含其他无关紧要的代码。那么我们如何处理项目中无处不在的异常呢?

全局异常处理不管对于API项目还是普通管理项目都是核心的部分,如果项目中遇到运行时异常,总不能每个异常处理都去添加try catch逻辑。在SpringBoot项目中跟SpringMVC的全局异常配置是一样的,下面我们来为API项目配置全局异常并且返回相同格式的JSON字符串。

Spring Boot对异常的处理也做了不错的支持,它提供了@ControllerAdvice和 @ExceptionHandler注解,前者是用来开启全局的异常捕获,后者则是说明捕获哪些异常,并对这些捕获的异常进行处理。

1、在Result类上新建error 的处理,如下

/**
* 返回错误的异常
* @param object
* @return
*/
public static Result error(Object object){
    return new Result(ResultCodeEnums.ERROR.getCode(), ResultCodeEnums.ERROR.getMsg(),object);
}

public static Result error(){
    return new Result(ResultCodeEnums.ERROR.getCode(), ResultCodeEnums.ERROR.getMsg());
}

2、新建controller 测试方法

@GetMapping("testException")
public Result testException(){

    int i = 5/0;

    return Result.success();
}

3、新建全局异常处理类

@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {


    @ExceptionHandler(value =java.lang.ArithmeticException.class)
    @ResponseBody
    public Result exceptionHandler1(ArithmeticException e){
        return Result.error();
    }


    @ExceptionHandler(value =Exception.class)
    public Result exceptionHandler(Exception e){
        log.error("未知异常!原因是:",e);
        return Result.error(e.getMessage());
    }
}

4、访问 http://localhost:8080/testException

在这里插入图片描述

总结

本文章配套视频地址 https://www.bilibili.com/video/BV1pt4y1x7nf/

以上教程示例源码
链接:https://pan.baidu.com/s/1qz1Vj4LodnfK40w4D8dQMw
提取码:78m3

如有问题,可以加我公众号进行技术交流
在这里插入图片描述
老姚,带你学习先进的分布式技术、架构技术、运维技术,干货满满

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值