springboot 实体参数校验 validate 抛出javax.validation.ConstraintViolationException异常 统一处理

Posted 爷的眼睛闪亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot 实体参数校验 validate 抛出javax.validation.ConstraintViolationException异常 统一处理相关的知识,希望对你有一定的参考价值。



@ControllerAdvice
public class WebExceptionHandler {
//处理Get请求中 使用@Valid 验证路径中请求实体校验失败后抛出的异常,详情继续往下看代码
@ExceptionHandler(BindException.class)
@ResponseBody
public Result BindExceptionHandler(BindException e) {
String message = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining());
return Result.build(ResultCode.PARAM_ERROR.getCode(),message);
}

//处理请求参数格式错误 @RequestParam上validate失败后抛出的异常是javax.validation.ConstraintViolationException
@ExceptionHandler(ConstraintViolationException.class)
@ResponseBody
public Result ConstraintViolationExceptionHandler(ConstraintViolationException e) {
String message = e.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining());
return Result.build(ResultCode.PARAM_ERROR.getCode(),message);
}

//处理请求参数格式错误 @RequestBody上validate失败后抛出的异常是MethodArgumentNotValidException异常。
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public Result MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
String message = e.getBindingResult().getAllErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining());
return Result.build(ResultCode.PARAM_ERROR.getCode(),message);
}
}

@Configuration
public class WebParamValidateConfig {

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

}


以上是关于springboot 实体参数校验 validate 抛出javax.validation.ConstraintViolationException异常 统一处理的主要内容,如果未能解决你的问题,请参考以下文章

Springboot通过切面校验参数完整性

Spring boot 参数校验

Spring boot 参数校验

SpringBoot - 优雅的实现参数校验高级进阶

SpringBoot - 优雅的实现业务校验高级进阶

SpringBoot 巧用全局处理器,优雅的解决参数校验!