springboot hibernate @Valid不生效以及javax.validation.ValidationException: HV000032問題處理
阿新 • • 發佈:2018-12-19
在java專案中寫bean校驗的時候太麻煩就用hibernate-validator來校驗,遇到了兩個問題記錄一下
@Valid不生效
在springboot中配置Validator
import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
@Configuration
public class ValidatorConfiguration {
@Bean
public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure()
. addProperty("hibernate.validator.fail_fast", "true")
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
return validator;
}
}
一個報錯 javax.validation.ValidationException: HV000032: Unable to initialize org.hibernate.validator.internal.constraintvalidators.bv.size.SizeValidatorForCharSequence.
導致這個問題有兩個原因,一個是沒有引入javax.el-api
,另一個是hibernate版本
問題引起的
最終pom中關於hibernate校驗的依賴,請檢測是否都引入了
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.12.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
一個測試示例
@Size(min = 4, max = 6, message = "驗證碼長度應該在4-6位之間")
@NotNull(message = "驗證碼不能為空")
private String validateCode;
@Max(value = 100, message = "數字最大值為20")
@Min(value = 20, message = "數字最小值為20")
@NotNull(message = "數字不能為空")
private Long number;
改完pom記得在pom檔案上右鍵Maven->Reimport