1. 程式人生 > >springboot hibernate @Valid不生效以及javax.validation.ValidationException: HV000032問題處理

springboot hibernate @Valid不生效以及javax.validation.ValidationException: HV000032問題處理

在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