自定义异常状态码

很多时候程序会有异常,可以将异常封装成一个类,用于做统一异常管理,去处理controller中出现的错误
/**

  • 统一处理异常,处理controller出现的异常,能够精确匹配异常

  • basePackages:处理那个controller下的异常
    */
    //@Slf4j日志记录注解,将错误信息记录为日志
    //@ResponseBody //以json的形式写出去
    @Slf4j
    //@ControllerAdvice(basePackages = “com.cc.mall.product.controller”)
    @RestControllerAdvice(basePackages = “com.cc.mall.product.controller”) //@ResponseBody和@ControllerAdvice()的合体
    public class MallExceptionControllerAdvice {
    //数据校验的异常
    //当controller出现异常的时候,就会来到这里就是MethodArgumentNotValidExceptione 这个是数据校验的时候的具体异常,根据终端打印的来相应修改
    @ExceptionHandler(value = MethodArgumentNotValidException.class) //这个注解告诉springmvc这个异常处理类用于处理什么异常
    public R handleVaildException(MethodArgumentNotValidException e){

     log.error("数据校验出现问题{},异常类型{}",e.getMessage(),e.getClass());
     BindingResult bindingResult = e.getBindingResult();
     Map<String,String> errorMap = new HashMap<>();
     bindingResult.getFieldErrors().forEach((item)->{
         //1.获取错误消息
         String message = item.getDefaultMessage();
    
         //2.获取错误的属性名
         String field = item.getField();
    
         errorMap.put(field,message);
     });
     return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(),BizCodeEnume.VAILD_EXCEPTION.getMsg()).put("data",errorMap);
    

    }

    /**

    • 对于无法精确匹配的异常进行处理

    • @return
      */
      @ExceptionHandler(value = Throwable.class)
      public R handleException(Throwable throwable){

      return R.error(BizCodeEnume.UNKNOW_EXCEPTION.getCode(),BizCodeEnume.UNKNOW_EXCEPTION.getMsg());

    }

}

2.同时可以编写个错误码和错误信息定义类
**1.错误码定义规则为5位数字

  • 2.前两位表示业务场景,最后三位表示错误码。如100001 。10:通用,001:系统未知异常
  • 3.维护错误码后需要维护错误描述,将他们定义为枚举形式
  • 错误码列表
  • 10:通用
  • 001,参数格式校验
  • 11:商品
  • 12:订单
  • 13:购物车
  • 14:物流**

public enum BizCodeEnume {

//系统未知异常
UNKNOW_EXCEPTION(10000,"系统未知异常"),

//验证异常状态码
VAILD_EXCEPTION(10001,"参数格式校验失败");


//枚举就是个私有的构造器
private int code;
private String msg;

BizCodeEnume(int code,String msg){
    this.code = code;
    this.msg = msg;
}

public int getCode() {
    return code;

}



public String getMsg() {
    return msg;
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值