10

私はしばらくの間、運がなくて周りを見回してきました。Spring MVCを使用していません@javax.validation.Validが、メソッド引数の検証を有効にするために使用したいと考えています。例を挙げると

public class EventServiceImpl implements IEventService {
    @Override
    public void invite(@Valid Event event, @Valid User user) { ... }
}

@ControllerMVCを使用すると、これは単純な注釈付きBeanに対して有効になり<mvc:annotation-driven/>ます(5.7.4.3 Spring MVCで使用するためのJSR-303バリデーターの構成を参照)。

AOPの使用は非常に簡単です。それでも、これを行うための標準的な方法があると思います。したがって、質問:非MVCアプリケーションと非コントローラーBeanに、注釈付きBeanの入力検証を有効にするための同様の機能はありますか?

4

3 に答える 3

7

メソッドレベルの検証は、Bean Validation仕様(JSR 303)の一部ではありません。メソッドレベルの検証は、付録Cに追加された仕様の提案です。

Hibernate Validator 4.2(ベータ版はすでにリリースされています)はこの提案を実装しており、メソッドパラメーターと戻り値にJSR303アノテーションを配置できます。もちろん、Springグルーコードはまだ必要ですが、それほど難しくはありません。

また、Bean Validation 1.1は、メソッドレベルの検証を公式に仕様に追加します(付録/推奨事項としてだけではありません)。http://beanvalidation.org/も参照してください

于 2011-02-05T14:29:34.663 に答える
4

MVCを使用すると、これは@Controller注釈付きBeanに対して有効になります

@Validは、検証を行うコードを非表示にし、すべての制約違反を適切Errorsな方法で配置する、コントローラーBeanの単なるマーカーです。春のデザイナーは、同じことをするために独自の注釈を発明することができたでしょう。

@Validアノテーションの実際の用途は、JSR 303バリデーターで検証しているクラス(bean)であり、その主な用途はオブジェクトグラフを検証することです。つまり、1つのBeanは、@ Validアノテーションを使用して他のBean参照を持ち、検証を再帰的にトリガーできます。

MVCの外部では、構成済みのバリデーターを使用して、JSR 303アノテーションを使用するBeanを検証できますがErrors、コントローラーに適切に入力されているものとは異なり、制約違反をどのように処理するかを自分で決定する必要があります。

したがって、あなたの質問に答えるには、標準的な方法はありません。コントローラーと同じ外観にするために、@ Validアノテーションを使用して(または新しいアノテーションを作成して)、AOPアドバイスを実行してBeanを検証し、に渡す必要のある「ViolationCollector」(MVCのエラーなど)を設定できます。方法。

于 2011-02-05T00:32:56.833 に答える
1

答えはかなり古いようです。現在のところ、任意のSpringBeanのメソッドインライン検証を@Validated利用できます。MethodValidationPostProcessorこれらは基本的に、コントローラーではなく、任意の層のSpringマネージドBeanのポイントカットのような動作を作成する責任があります。私の他の答えも参照してください。

于 2019-02-11T12:01:34.493 に答える