validation - Spring JSR303 验证不像 Spring 文档中描述的那样工作

标签 validation spring hibernate-validator bean-validation

我尝试为我的 Web 应用程序实现验证,如 5.7.4.3 部分所述Spring 3.0 文档:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="validator">
                <bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
            </property>
        </bean>
    </property>
</bean>

我已添加 hibernate-validator 作为依赖项,一切看起来都不错,但是启动我的 Web 应用程序会导致以下错误:
org.springframework.beans.NotWritablePropertyException:
Invalid property 'validator' of bean class
[org.springframework.web.bind.support.ConfigurableWebBindingInitializer]:
Bean property 'validator' is not writable or has an invalid setter method.
Does the parameter type of the setter match the return type of the getter?

在查看 API 时,很明显有问题。 LocalValidatorFactoryBean 工具javax.validation.Validator ConfigurableWebBindingInitializer.setValidator() 期待 org.springframework.validation.Validator .

有什么解决办法吗?

编辑

关于 LocalValidatorFactoryBean :

This is the central class for javax.validation (JSR-303) setup in a Spring application context: It bootstraps a javax.validation.ValidationFactory and exposes it through the Spring Validator interface as well as through the JSR-303 Validator interface and the ValidatorFactory interface itself.



就像亚历克斯编码(marshal)在下面所说的那样,这是 不是 案子。 LocalValidatorFactoryBean只执行 javax.validation.Validator .
LocalValidatorFactoryBean确实扩展 SpringValidatorAdapter尽管如此,它实现了 org.springframework.validation.Validator .

最佳答案

这是此问题的解决方法:

使用 validator bean 配置来自我上面的问题,您必须使用验证在每个 Controller 中添加以下代码。

@Autowired
private javax.validation.Validator validator;

@InitBinder
protected void initBinder(WebDataBinder binder) {
    binder.setValidator((org.springframework.validation.Validator) this.validator);
}

它很脏,但它有效,因为 LocalValidatorFactoryBean扩展 SpringValidatorAdapter这实现了 org.springframework.validation.Validator .

关于validation - Spring JSR303 验证不像 Spring 文档中描述的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1508967/

相关文章:

php - Yii2 ajax 验证不起作用

java - Java 中的验证框架

flutter - TextFormField 验证器不起作用 - 在 null 上调用了方法 'validate'

json - z模式中的 "anyof"和 "oneof"有什么区别?

spring - 配置 Spring MockMvc 以在内置参数解析器之前使用自定义参数解析器

java - Spring 与 JMS glassfish MQ 集成

java - Spring Data JPA 中的自定义(原始)查询

javax.validation.ValidationException : HV000183: Unable to load 'javax.el.ExpressionFactory'

java - 如何使用 Hibernate Validator 验证单个字段?

spring - 使用 Autowiring 的 spring 服务测试自定义验证器