统一异常的一般做法
1.如果想要做一个统一的异常处理类的话。需要以下这两点
- 创建一个带有注解@RestControllerAdvice 的类。
- (basePackages = "com.xue.gulimall.product.controller") 可以在注解后面添加 统一异常执行所在的包,对哪一个包出现异常进行统一异常返回。
- 创建一个带有注解@ExceptionHandler的方法
- (value = MethodArgumentNotValidException.class) 可以指定哪种异常返回这个方法指定的信息
- (value = Throwable.class) 只要该包下出现了异常并抛出,就会被这个方法获取到并返回指定的异常信息
示例:
@RestControllerAdvice(basePackages = "com.xue.gulimall.product.controller")
public class GulimallExceptionAdvice {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public R exception1(MethodArgumentNotValidException e ){
//1.获取这个 指定异常的 绑定数据
BindingResult bindingResult = e.getBindingResult();
//2.创建一个map,接收通过获取的异常数据
HashMap<String, String> map = new HashMap<>();
//3.遍历 异常绑定数据的 全部异常的 属性,并将属性和错误的默认返回信息 加入map
bindingResult.getFieldErrors().forEach((fieldError) -> {
map.put(fieldError.getField(),fieldError.getDefaultMessage());
});
// 返回map中的信息
return R.error(BizCodeEnume.VALIDATION_EXCEPTION.getCode(),BizCodeEnume.VALIDATION_EXCEPTION.getMessage()).put("error",map);
}
@ExceptionHandler(value = Throwable.class)
public R exception1(Throwable e ){
return R.error(BizCodeEnume.UNKNOWN_EXCEPTION.getCode(),BizCodeEnume.UNKNOWN_EXCEPTION.getMessage());
}
}
- 做一个统一的返回码,通过枚举类实现
public enum BizCodeEnume {
UNKNOWN_EXCEPTION(10000,"系统未知异常"),
VALIDATION_EXCEPTION(10001,"参数校验失败");
private Integer code;
private String message;
BizCodeEnume(Integer code,String message){
this.code=code;
this.message =message;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}```