SpringBoot统一异常处理解决思路
对于一个完美的项目,异常处理是必不可少的。SpringBoot的统一异常处理,可以让项目出现的绝大多数异常都在你的把控之类。废话不多说,直接上干货。
首先先知道一下SpringBoot统一异常处理四剑客(四模板),1. 异常类型枚举类,2.自定义异常,3.统一信息返回类,4.全局异常处理类。现在不懂没关系,后面会讲。
第一个干货 @ControllerAdvice注解
@ControllerAdvice注解有三个用途,全局异常处理,全局数据绑定,全局数据预处理。因为本篇文章是讲统一异常处理的,所以我们这里只讲其全局异常处理的用法。
那么@ControllerAdvice有什么用呢?所以Controller抛出来的异常都能由被@ControllerAdvice注解的类来进行异常处理。当然还要结合@ExceptionHandler注解。上代码!
这里我们先不要关注R是什么,后面会将。@ControllerAdvice类注解注解标明这个类被用来处理Controller抛出来的所有异常。@ExceptionHandler方法加异常类的字节码对象参数标明该方法用来处理的异常类型。比如RRExceptionHandle方法用来处理RRException(自定义异常,后面会讲)这个异常及其子类,而如果Contrller抛出NullPointException异常则不会由RRExceptionHandle这个方法来处理。
/**
* controller 统一异常处理
*/
@ControllerAdvice
public class CommonExceptionHandle {
@ResponseBody
@ExceptionHandler(RRException.class)
public R RRExceptionHandle(RRException exception){
return R.error(exception.getCode(),exception.getMsg());
}
@ResponseBody
@ExceptionHandler(RuntimeException.class)
public R RuntimeExceptionHandle(RuntimeException runtimeException){
return R.error(500,runtimeException.getMessage());
}
}
异常类型枚举类
异常枚举类,通过设置枚举类型和自定义异常结合起来,可以很方便的定义各种类型的异常。(@Getterd得装lombok插件才能使用)
@Getter
public enum ExceptionEnum {
ADMINISTRATOR_UPDATE_FAILED(5000,"管理员更新错误"),
ADMINISTRATOR_SAVE_FAILED(5001,