10

JSR-303 はメソッド パラメータの検証も目的としていますか?

もしそうなら、ウェブ上に例はありますか?私が直面している最大の課題は、各メソッド内でバリデーターを取得する方法です。Spring 3 では、事実上すべてのクラスにLocalValidatorFactoryBean.

ありがとう!

4

5 に答える 5

10

メソッドレベルの検証は、JSR303のリファレンス実装であるHibernateValidatorの次期バージョン4.2でサポートされる予定です。

前の回答で指摘したように、これにより、メソッドのパラメーターと戻り値で制約アノテーション(組み込み型とカスタム定義型)を指定して、メソッドの呼び出しの事前条件と事後条件を指定できます。

HVは、メソッド呼び出しの実際の検証のみを処理し、そのような検証をトリガーしないことに注意してください。検証の呼び出しは、AOPまたはJDKの動的プロキシなどの他のメソッドインターセプト機能を使用して実行できます。

この問題のJIRAの問題はHV-347[1]であるため、この問題のウォッチャーとして自分自身を追加することをお勧めします。

[1] http://opensource.atlassian.com/projects/hibernate/browse/HV-347

于 2011-01-09T23:43:26.853 に答える
3

各 JSR 303 アノテーションのjavadocは、次のことを示しています。

@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})

ほら、PARAMETERあります。はい、技術的には可能です。

次に例を示します。

public void method(@NotNull String parameter) {
    // ...
}

ただし、Spring を使用していないため、Spring とどのように統合されるかはわかりません。あなたはそれを試してみることができます。

于 2010-12-13T00:10:43.997 に答える
2

これは、AOP (AspectJ) の使用例のように思えます。で注釈が付けられたメソッドのポイントカットを作成し、javax.validation.constraints.*(おそらく Spring を使用して) バリデーターをアスペクトに挿入し、@Beforeまたは@Aroundアドバイスを使用して、メソッドの実行前に検証を実行します。

AspectJ in Actionを参照してください。

于 2010-12-13T07:33:10.783 に答える
0

JSR 303 と AspectJ を統合するjcabi-aspects (私は開発者です) を使用できます。実際の検証は、Hibernate Validator や Apache BVal などのクラス パスに追加する必要がある JSR 303 実装の 1 つによって行われます。

于 2013-03-15T11:09:37.330 に答える