我尝试为我的 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 ajavax.validation.ValidationFactory
and exposes it through the SpringValidator
interface as well as through the JSR-303Validator
interface and theValidatorFactory
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/