前言
在项目开发中出现异常时很平常不过的事情,我们处理异常也有很多种方式,可能如下:
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
如有问题,可以加我公众号进行技术交流
老姚,带你学习先进的分布式技术、架构技术、运维技术,干货满满