不使用 hibernate-validator 依赖项的 Spring Boot 应用程序

4
我正在尝试在没有hibernate-validator依赖项的情况下让spring-boot(spring-boot-starter-web:1.3.5.RELEASE和 spring-boot-starter-validation:1.3.5.RELEASE)正常工作。以下是我可以选择的选项:
选项1:使用默认的OptionalValidatorFactoryBean。
选项2:查找其他JSR 303实现 - org.apache.bval:bval-jsr303或其他任何内容。
我尝试了选项1,但是依赖注入忽略了此设置并寻找hibernate-validator并失败了。
@Bean
public org.springframework.validation.Validator validator() {
    return new OptionalValidatorFactoryBean();
}

使用选项2时,我将jar文件放在类路径上,但是依赖注入无法选择实现。
除了hibernate-validator之外,拥有一个可用的验证器流程会很好,或者至少提供像选项1那样的虚拟验证。

出于好奇,你对Hibernate Validator有什么问题? - Guillaume Smet
这是我的雇主提出的一些法律障碍,没有其他技术原因。 - Mohan
3个回答

3
如果您选择Option1,
选项1:使用默认的OptionalValidatorFactoryBean。
根据OptionalValidatorFactoryBean的JavaDocs,
这是Spring MVC配置命名空间实际使用的类, 如果javax.validation API存在但没有显式配置验证器。
请确保在类路径中存在javax.validation API
=====================================================
如果您选择Option2,使用Apache BVal代替Hibernate Validator。
选项2:查找其他JSR 303实现-org.apache.bval:bval-jsr303或其他任何内容。
<!-- Validator bean -->
<bean id="validator"
    class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="providerClass"
        value="org.apache.bval.jsr303.ApacheValidationProvider" />
</bean>

或使用JavaConfig

@Bean
public LocalValidatorFactoryBean localValidatorFactoryBean() throws ClassNotFoundException {
    LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
    
    bean.setProviderClass(org.apache.bval.jsr303.ApacheValidationProvider.class);
    // bean.setProviderClass(org.apache.bval.jsr.ApacheValidationProvider.class);
    // bean.setProviderClass(org.hibernate.validator.HibernateValidator.class);
   
    return bean;
}

1

您需要声明一个类型为LocalValidatorFactoryBean的bean,而不是OptionalValidatorFactoryBean。

您可以在spring文档中了解更多相关信息。

@Bean
public javax.validation.Validator localValidatorFactoryBean() {
   return new LocalValidatorFactoryBean();
}

最后,请确保只有一个JSR-303/JSR-349提供者(如Hibernate Validator或Apache Bval)的实现JAR存在于类路径上,而不是两个。

0

添加Maven依赖:

<!-- Bean Validation -->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

<dependency>
    <groupId>org.apache.bval</groupId>
    <artifactId>bval-jsr</artifactId>
    <version>1.1.2</version>
</dependency>

在实际应用中,Spring Boot 的输出为:

***************************
APPLICATION FAILED TO START
***************************

Description:

Binding to target MyProperties(prop1=null, ...) failed:

    Property: prop1
    Value: null
    Reason: must not be null

Action:

Update your application's configuration

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接