代码之家  ›  专栏  ›  技术社区  ›  Koraktor

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

  •  6
  • Koraktor  · 技术社区  · 15 年前

    我尝试为我的Web应用程序实现验证,如第节所述。 5.7.4.3 关于Spring3.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验证程序添加为依赖项,所有内容看起来都正常,但启动我的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() 期望A org.springframework.validation.Validator .

    有什么解决办法吗?

    编辑

    关于 本地验证工厂bean :

    这是头等舱 javax.validation (JSR-303)在Spring应用程序上下文中的设置:它引导 javax.validation.ValidationFactory 在春天曝光 Validator 接口以及通过JSR-303 验证器 接口和 ValidatorFactory 接口本身。

    就像亚历克斯·马歇尔在下面所说的,这是 案件。 本地验证工厂bean 仅实现 javax.validation.validator验证程序 .

    本地验证工厂bean 确实扩展 SpringValidatorAdapter 但是,它实现了 org.springframework.validation.validator验证程序 .

    2 回复  |  直到 15 年前
        1
  •  6
  •   Koraktor    15 年前

    validator

    @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