JSR303 和ControllerAdviec + ExceptionHandler 实现全局异常处理

全局异常处理器类:

@RestControllerAdvice(basePackages="com.atguigu.gulimall.product.controller")
public class GulimallExceptionControllerAdvice {
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public R handleVaildException(MethodArgumentNotValidException e){
        log.error("数据校验错误:{},异常类型:{}",e.getMessage(),e.getClass());
        BindingResult bindingResult = e.getBindingResult();
        Map<String, String> errorResMap = new HashMap<>(2);
        bindingResult.getFieldErrors().forEach((item)->{
            errorResMap.put(item.getField(),item.getDefaultMessage());
        });
        return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(),BizCodeEnume.VAILD_EXCEPTION.getMsg()).put("Error",errorResMap);
    }
    @ExceptionHandler(value = Throwable.class)
    public R handleVaildException(Throwable throwable){

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

异常枚举类


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

}

校验使用 @Valid 规范提供 没有分组校验功能 或者@Valided spring提供 可以实现分组校验 配合分组接口

@NotNull(message ="品牌id不能为空",gorup="com.atguigu.valid.AddGroup.class")   
@TableId
private Long brandId;
public interface AddGroup{
}
posted @ 2021-03-26 13:17  小秦的开发梦  阅读(127)  评论(0)    收藏  举报