统一异常处理类
对于项目中出现的异常,我们通常采用ControllerAdvice的方式进行统一处理,简化代码。
1)、编写异常处理类,使用@ControllerAdvice。
2)、使用@ExceptionHandler标注方法可以处理的异常。
package com.zsy.product.exception;/*** 集中处理所有异常* @author ZSY*/@Slf4j//@ResponseBody//@ControllerAdvice(basePackages = "com.zsy.product.controller")@RestControllerAdvice(basePackages = "com.zsy.product.controller")public class MallExceptionControllerAdvice {@ExceptionHandler(value= MethodArgumentNotValidException.class)public R handleValidException(MethodArgumentNotValidException e){log.error("数据校验出现问题{},异常类型:{}",e.getMessage(),e.getClass());BindingResult bindingResult = e.getBindingResult();Map<String,String> errorMap = new HashMap<>();bindingResult.getFieldErrors().forEach((fieldError)->{errorMap.put(fieldError.getField(),fieldError.getDefaultMessage());});return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(),BizCodeEnume.VAILD_EXCEPTION.getMsg()).put("data",errorMap);}@ExceptionHandler(value = Throwable.class)public R handleException(Throwable throwable){log.error("错误:",throwable);return R.error(BizCodeEnume.UNKNOW_EXCEPTION.getCode(),BizCodeEnume.UNKNOW_EXCEPTION.getMsg());}}
异常代码枚举
package com.zsy.common.exception;/**** 错误码和错误信息定义类* 1. 错误码定义规则为5为数字* 2. 前两位表示业务场景,最后三位表示错误码。例如:100001。10:通用 001:系统未知异常* 3. 维护错误码后需要维护错误描述,将他们定义为枚举形式* 错误码列表:* 10: 通用* 001:参数格式校验* 11: 商品* 12: 订单* 13: 购物车* 14: 物流* @author ZSY*/public enum BizCodeEnum {/*** 系统未知异常*/UNKNOWN_EXCEPTION(10000, "系统未知异常"),/*** 参数校验错误*/VALID_EXCEPTION(10001, "参数格式校验失败");private final int code;private final String msg;BizCodeEnum(int code, String msg) {this.code = code;this.msg = msg;}public int getCode() {return code;}public String getMsg() {return msg;}}
