JSR-303 はメソッド パラメータの検証も目的としていますか?
もしそうなら、ウェブ上に例はありますか?私が直面している最大の課題は、各メソッド内でバリデーターを取得する方法です。Spring 3 では、事実上すべてのクラスにLocalValidatorFactoryBean
.
ありがとう!
JSR-303 はメソッド パラメータの検証も目的としていますか?
もしそうなら、ウェブ上に例はありますか?私が直面している最大の課題は、各メソッド内でバリデーターを取得する方法です。Spring 3 では、事実上すべてのクラスにLocalValidatorFactoryBean
.
ありがとう!
メソッドレベルの検証は、JSR303のリファレンス実装であるHibernateValidatorの次期バージョン4.2でサポートされる予定です。
前の回答で指摘したように、これにより、メソッドのパラメーターと戻り値で制約アノテーション(組み込み型とカスタム定義型)を指定して、メソッドの呼び出しの事前条件と事後条件を指定できます。
HVは、メソッド呼び出しの実際の検証のみを処理し、そのような検証をトリガーしないことに注意してください。検証の呼び出しは、AOPまたはJDKの動的プロキシなどの他のメソッドインターセプト機能を使用して実行できます。
この問題のJIRAの問題はHV-347[1]であるため、この問題のウォッチャーとして自分自身を追加することをお勧めします。
[1] http://opensource.atlassian.com/projects/hibernate/browse/HV-347
各 JSR 303 アノテーションのjavadocは、次のことを示しています。
@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
ほら、PARAMETER
あります。はい、技術的には可能です。
次に例を示します。
public void method(@NotNull String parameter) {
// ...
}
ただし、Spring を使用していないため、Spring とどのように統合されるかはわかりません。あなたはそれを試してみることができます。
これは、AOP (AspectJ) の使用例のように思えます。で注釈が付けられたメソッドのポイントカットを作成し、javax.validation.constraints.*
(おそらく Spring を使用して) バリデーターをアスペクトに挿入し、@Before
または@Around
アドバイスを使用して、メソッドの実行前に検証を実行します。
AspectJ in Actionを参照してください。
JSR 303 と AspectJ を統合するjcabi-aspects (私は開発者です) を使用できます。実際の検証は、Hibernate Validator や Apache BVal などのクラス パスに追加する必要がある JSR 303 実装の 1 つによって行われます。