⾃定义异常状态码
很多时候程序会有异常,可以将异常封装成⼀个类,⽤于做统⼀异常管理,去处理controller中出现的错误
/**
统⼀处理异常,处理controller出现的异常,能够精确匹配异常
baPackages:处理那个controller下的异常
*/
//@Slf4j⽇志记录注解,将错误信息记录为⽇志
//@ResponBody //以json的形式写出去
@Slf4j
//@ControllerAdvice(baPackages = “ller”)
@RestControllerAdvice(baPackages = “ller”) //@ResponBody和@ControllerAdvice()的合体
public class MallExceptionControllerAdvice {
//数据校验的异常
//当controller出现异常的时候,就会来到这⾥就是MethodArgumentNotValidExceptione 这个是数据校验的时候的具体异常,根据终端打印的来相应修改
@ExceptionHandler(value = MethodArgumentNotValidException.class) //这个注解告诉springmvc这个异常处理类⽤于处理什么异常
public R handleVaildException(MethodArgumentNotValidException e){
<("数据校验出现问题{},异常类型{}",e.getMessage(),e.getClass());
BindingResult bindingResult = e.getBindingResult();
Map<String,String> errorMap = new HashMap<>();
//1.获取错误消息
String message = DefaultMessage();
//2.获取错误的属性名
String field = Field();
errorMap.put(field,message);
});
(BizCodeEnume.Code(),BizCodeEnume.Msg()).put("data",errorMap);
}
/**
对于⽆法精确匹配的异常进⾏处理
@return
*/
@ExceptionHandler(value = Throwable.class)
public R handleException(Throwable throwable){
(BizCodeEnume.Code(),BizCodeEnume.Msg());
}
}
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.msg = msg;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}