在开发中,往往需要对应前端穿过来的参数进行校验,有时候会显得参数校验过于臃肿,但是又不得不做。这里引入 Hibernate Validator
,它支持属性、字段、返回值、方法参数、类级别的校验,而且SpringBoot可以很轻松集成。
Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
配置
配置 ValidatorFactory
。
@Configuration
public class ValidatorConfig {
@Bean
public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure()
.failFast(true)
.buildValidatorFactory();
return validatorFactory.getValidator();
}
}
配置校验失败异常处理。
@ControllerAdvice
public class ExceptionAdvice {
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public ResponseEntity<ApiResult<?>> methodArgumentNotValidException(MethodArgumentNotValidException exception) {
List<ObjectError> allErrors = exception.getBindingResult().getAllErrors();
Iterator<ObjectError> iterator = allErrors.iterator();
StringBuilder builder = new StringBuilder();
while (iterator.hasNext()) {
ObjectError error = iterator.next();
String message = error.getObjectName() + ":" + error.getDefaultMessage();
builder.append(message);
}
return new ResponseEntity<>(new ApiResult<>(HttpStatus.BAD_REQUEST.value(), builder.toString()), HttpStatus.BAD_REQUEST);
}
@ExceptionHandler(value = ConstraintViolationException