6

Spring 3.0 ドキュメントのセクション5.7.4.3で説明されているように、Web アプリケーションの検証を実装しようとしました。

<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.ValidatorConfigurableWebBindingInitializer.setValidator()org.springframework.validation.Validator

これに対する解決策はありますか?

編集

LocalValidatorFactoryBean:

これは、Spring アプリケーション コンテキストでの (JSR-303) セットアップの中心 的なjavax.validationクラスです。javax.validation.ValidationFactoryValidatorValidatorValidatorFactory

以下でアレックス・マーシャルが述べたように、これは当てはまりませんLocalValidatorFactoryBeanのみを実装しjavax.validation.Validatorます。

LocalValidatorFactoryBean拡張しSpringValidatorAdapterますが、これは を実装し org.springframework.validation.Validatorます。

4

2 に答える 2

6

この問題の回避策は次のとおりです。

上記の質問の Bean 構成を使用して、validator検証を使用して各コントローラーに次のコードを追加する必要があります。

@Autowired
private javax.validation.Validator validator;

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

汚いですが、LocalValidatorFactoryBeanextendsSpringValidatorAdapterと this implementationsがあるため機能しますorg.springframework.validation.Validator

于 2009-10-06T11:09:45.590 に答える
4

ConfigurableWebBindingInitializer の Javadocを見ると、そのプロパティ「validator」のタイプは「org.springframework.validation.Validator」です。次に LocalValidatorFactoryBean の Javadoc を見ると、実際には (org.springframework.validation.Validator を作成するために) FactoryBean を実装しておらず、org.springframework.validation.Validator 自体も実装していないことがわかります。エラーで示されているように、ConfigurableWebBindingInitializer の「validator」プロパティを指定すると、間違った型になります。これは Spring 開発者側の (重大な?) 見落としであると思われます。jira.springframework.org の JIRA 課題トラッカーで、これに関する課題を作成する必要があります。

于 2009-10-02T18:42:58.080 に答える