其他分享
首页 > 其他分享> > JSR303数据校验

JSR303数据校验

作者:互联网

相关注解位于
package javax.validation.constraints;


 

1.给字段添加注解

2.通知springmvc需要校验

 

 

 3.给校验的bean后紧跟一个BindResult,就可以获取校验的结果

可以根据结果判断

 

 

效果:

 

 

 

小案例

 

 

 

统一异常

问题:每一个controller方法都要写校验代码

 

@ControllerAdvice

1、状态码枚举类

/**
 * 状态码
 * @author 江南大学1033190417
 * @date 2022/6/7 0:18
 */
/**
 * 错误码和错误信息定义类
 * 1. 错误码定义规则为5为数字
 * 2. 前两位表示业务场景,最后三位表示错误码。例如:100001。10:通用 001:系统未知异常
 * 3. 维护错误码后需要维护错误描述,将他们定义为枚举形式
 * 错误码列表:
 *  10: 通用
 *      001:参数格式校验
 *  11: 商品
 *  12: 订单
 *  13: 购物车
 *  14: 物流
 *
 *
 */
public enum BizCodeEnum {
    UKOWN_EXCEPTION(10000,"系统位置异常"),
    VALID_EXCEPTION(10001,"参数格式校验失败");

    private Integer code;

    private String msg;

    BizCodeEnum(Integer code,String msg){
        this.code=code;
        this.msg=msg;

    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}

 

2、统一异常处理类

import com.atguigu.common.exception.BizCodeEnum;
import com.atguigu.common.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.bouncycastle.crypto.ec.ECElGamalDecryptor;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

/**
 * 几种处理所有异常
 *
 * @author 江南大学1033190417
 * @date 2022/6/7 0:04
 */
@Slf4j
@ResponseBody
@ControllerAdvice(basePackages = "com.atguigu.gulimall.product.controller")
//@RestControllerAdvice可以替换上面两个
public class GulimallExceptionControllerAdvice {

    //处理数据校验异常
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public R handleValidException(MethodArgumentNotValidException e){
        log.error("数据校验出现问题{},异常类型{}",e.getMessage(),e.getClass());
        BindingResult result = e.getBindingResult();
        Map<String,Object> map=new HashMap<>();
        result.getFieldErrors().forEach((item)->{
            String message = item.getDefaultMessage();//错误信息
            String field = item.getField();//错误字段
            map.put(field,message);
        });
        return R.error(BizCodeEnum.VALID_EXCEPTION.getCode(),BizCodeEnum.VALID_EXCEPTION.getMsg()).put("data",map);
    }

    //处理其他异常
    @ExceptionHandler(value = Throwable.class)
    public R handleException(Throwable throwable){
        return R.error(BizCodeEnum.UKOWN_EXCEPTION.getCode(), BizCodeEnum.UKOWN_EXCEPTION.getMsg());
    }
}

 

标签:BizCodeEnum,JSR303,校验,springframework,import,org,数据,public
来源: https://www.cnblogs.com/msboke/p/16350300.html