0

Spring-3.1.0.GA を使用してサービス (Web アプリケーションではない) を開発しています。サービス入力を検証するために、Spring と共に hibernate-validator を使用したいと考えています。

以下を使用して Bean 検証サポートを有効にしました。

<bean id="validator"
      class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor"/>

サービス インターフェイスに @Validated のアノテーションを付け、メソッド パラメータに @NotNull、@Size、@Valid などのアノテーションを付けましたが、正常に動作しています。

しかし、検証グループに基づいて、自分のパラメーター、たとえば顧客を検証する必要があります。@Validated または @Validated(Group1.class) でメソッド パラメーターに注釈を付けると、Spring は検証を実行しません。

@Valid で注釈を付けると、検証が行われますが、デフォルトの検証グループが使用されます (予想どおり)。

さまざまなメソッドがさまざまなグループで動作するため、インターフェイス レベルで @Validate(Group1.class) に注釈を付けることはできません。

グループをサポートする Spring と hibernate-validator を使用して、サービス層の検証を実行するにはどうすればよいですか?

4

3 に答える 3

1

私はSpring Sourceコードを調べ、メソッドパラメータの検証グループが選択されていない理由を調べました...コードによると、メソッドレベルではなく、インターフェースレベルで @Validated からのみ検証グループ構成を選択しています。

しかし、SpringMVC のコンテキストでどのように機能するかを調べていません。まだ確認していません。

また、このプロセスで、子アプリケーションコンテキストで MethodValidationPostProcessor を構成すると、Spring によって取得されないことがわかりました。つまり、SpringMVC を使用している場合、[servlet-name]-servlet.xml で構成した場合にのみ MethodValidationPostProcessor が登録されます。ContextLoaderListener によって選択された子コンテキスト構成ファイルで構成すると、Spring は MethodValidationPostProcessor を登録しません。また、それが MethodValidationPostProcessor または任意の BeanPostProcessors のみであるかどうかもわかりません。

于 2012-05-14T04:54:12.267 に答える
0

Spring 3.1.0+ では、 @Valid アノテーションでグループを直接使用できます。例えば:

@Valid(groups={Default.class, Group1.class})
于 2012-05-10T11:28:48.050 に答える