2016-06-22 8 views
0

私は自分のプロジェクトにHibernate Validatorを使用しています。制約バリデータの実装内でBeanの別のフィールドを参照するカスタム制約を使用したいと思います。これはどのように可能ですか?カスタム制約内から他のBean値を参照する

@NotNull(when="mvel:this.two == null") 
private String one; 

@NotNull(when="mvel:this.one == null") 
private String two; 

バリ

public class NotNullValidator implements ConstraintValidator<NotNull, String> { 

    @Override 
    public boolean isValid(String value, ConstraintValidatorContext context) { 
     //how do I get access to the parent bean here?? 
    } 
} 

私は休止状態5.0.0、ジャージー2.6、JBossの5、Javaの6

答えて

0

を使用しています短い答えは、あなたがすることはできませんです。フィールドの検証に使用できる現在のコンテキスト情報では、Beanインスタンス全体にアクセスすることはできません。少なくとも今のところはそうではありません。コンテキストにルートBeanを追加することについての議論がありますが、Bean Validation仕様に従って、ルートBeanは利用できません。これの背後にある理由は、Validatorの一部のメソッドにBeanインスタンス(validateValue)がないためです。どの検証方法が使用されているかに応じて、制約が合格するか失敗する可能性があります。

複数のフィールドを比較/参照する場合は、カスタムクラスレベルの制約が必要です。

関連する問題