validate 使用
使用步骤
再controller层中方法对象添加@valid @RequestBody
再验证实体类中添加@Data 其中属性不能大写开头
Springboot配置捕捉validate校验参数异常统一处理并自定义validate校验返回格式
1、添加一个异常处理类
@ControllerAdvice
public class WebExceptionHandler {
 
    /**
     * 处理请求参数格式错误 @RequestBody上使用@Valid 实体上使用@NotNull等,验证失败后抛出的异常是MethodArgumentNotValidException异常
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public JsonData MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
        String message = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining());
        return JsonData.buildCodeAndMsg(BASE_VAILD_EXCEPTION.getCode(),message);
    }
 
    /**
     * 处理Get请求中 使用@Valid 验证路径中请求实体校验失败后抛出的异常
     */
    @ExceptionHandler(BindException.class)
    @ResponseBody
    public JsonData BindExceptionHandler(BindException e) {
        String message = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining());
        return JsonData.buildCodeAndMsg(BASE_VAILD_EXCEPTION.getCode(),message);
    }
 
    /**
     * 处理请求参数格式错误 @RequestParam上validate失败后抛出的异常是ConstraintViolationException
     */
    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseBody
    public JsonData ConstraintViolationExceptionHandler(ConstraintViolationException e) {
        String message = e.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining());
        return JsonData.buildCodeAndMsg(BASE_VAILD_EXCEPTION.getCode(),message);
    }
 
    /**
     * 参数格式异常
     */
    @ExceptionHandler(HttpMessageNotReadableException.class)
    @ResponseBody
    public JsonData HttpMessageNotReadableExceptionHandler(HttpMessageNotReadableException e) {
        return JsonData.buildCodeAndMsg(BASE_VAILD_EXCEPTION.getCode(),"参数格式异常");
    }
 
 
}
二、配置校验快速失败:只要出现校验失败的情况,就结束校验,不再进行后续的校验
/**
 * validate参数校验默认的是一个参数校验失败后,还会继续校验后面的参数
 * 通过这个配置改成:校验参数时只要出现校验失败的情况,就立即抛出对应的异常,结束校验,不再进行后续的校验
 */
@Configuration
public class WebConfig {
 
    @Bean
    public Validator validator() {
        ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
                .configure()
                //failFast的意思只要出现校验失败的情况,就立即结束校验,不再进行后续的校验。
                .failFast(true)
                .buildValidatorFactory();
        return validatorFactory.getValidator();
    }
 
    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
        methodValidationPostProcessor.setValidator(validator());
        return methodValidationPostProcessor;
    }
 
}
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号