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

}

posted on 2022-03-04 15:03  ttke  阅读(336)  评论(0编辑  收藏  举报