我尝试为我的 Web 应用程序实现验证,如Spring 3.0 文档的第5.7.4.3节所述:
<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
whileConfigurableWebBindingInitializer.setValidator()
期望一个org.springframework.validation.Validator
.
有什么解决办法吗?
编辑
这是 Spring 应用程序上下文中 (JSR-303) 设置的中心类
javax.validation
:它引导 a并通过 Spring接口以及 JSR-303接口和接口本身javax.validation.ValidationFactory
公开它。Validator
Validator
ValidatorFactory
就像亚历克斯马歇尔在下面所说的那样,情况并非如此。LocalValidatorFactoryBean
只实现javax.validation.Validator
。
LocalValidatorFactoryBean
确实扩展SpringValidatorAdapter
了,它实现了 org.springframework.validation.Validator
.