2010-12-12 16 views
10

JSR-303はメソッドパラメータの検証にも使用されますか?JSR-303によるメソッドパラメータの検証

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

ありがとうございます!

答えて

3

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

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

3

JSR 303注釈のそれぞれについてjavadocsは、次のように伝えます:

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

を参照してください、PARAMETERがあります。はい、それはです。技術的にはが可能です。ここで

は例です:

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

は、私は、しかし、私はそれを使用していないので、それは春と統合かどうかはわかりません。あなたはそれを試すことができます。

9

メソッドレベルの検証は、JSR 303のリファレンスインプリメンテーションHibernate Validatorの次期バージョン4.2でサポートされます。

これまでの回答で指摘したように、メソッドのパラメータに制約注釈(ビルトインおよびカスタム定義の型)を指定し、メソッド呼び出しの前後の条件を指定することができます。

HVは、このような検証をトリガーするのではなく、メソッド呼び出しの実際の検証のみを扱うことに注意してください。検証呼び出しは、AOPやJDKの動的プロキシなどの他のメソッド傍受機能を使用して行うことができます。

この問題のJIRAの問題はHV-347 [1]ですので、あなた自身をこの問題の監視者として追加することをお勧めします。

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

+0

私はあなたのブログの記事は、あなたの答えを補足すると思います。)http://musingsofaprogrammingaddict.blogspot.com/2011/01/method-validation-with-h ibernate.html – Maxym

+0

Gunnarは自分のソリューションを[GitHub](https://github.com/gunnarmorling/methodvalidation-integration)に入れるのに十分な機会でした。私のためにうまくいった。 – Patrick

0

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

2

Spring 3.1.0では、@Validatedアノテーションを使用してpojoで検証を有効にすることができます。 pojoクラスのインタフェースを作成し、このアノテーションをメソッド定義に追加し、メソッド定義に検証注釈を追加します。、アクティブな検証と標準春のWebアプリケーションから始め

public class PojoClassImpl implements PojoClass { 
    public String doSomething(String input) { 
     return ""; 
    } 
} 

で追加することを忘れないでください:

@Validated 
public interface PojoClass { 
    public @NotNull String doSomething(@NotEmpty String input); 
} 

あなたのPOJO(春、定義としてインターフェイスを使用してプロキシクラスを作成しますので、インターフェースが必要です)あなたの春の設定このBeanの宣言:

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

いくつかの奇妙な理由のためにConstraintViolationException public \ @NotNull String doSomething();は動作しませんでしたが、\ @NotNull public String doSomething();した。バーを使用して、ユーザーがOと思ったAtシンボルをエスケープします – borjab

関連する問題