统一异常的一般做法

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());
    }

}
  1. 做一个统一的返回码,通过枚举类实现
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;
    }
}```
posted @ 2021-08-20 10:11  时间会抹去你的痕迹  阅读(78)  评论(0编辑  收藏  举报