2012-03-08 2 views
0

私はインターネットで見ましたが、私の問題を解決するJSR 303の例は見つかりませんでした。JSR 303インスタンスに基づくオブジェクトの異なる規則

では、次のクラスがあるとし(このデザインは変更することはできません!):

次のように住所と連絡先住所が表現されていた人:

public class Person { 

    private Address domicile = null; 
    private Address correspondence = null; 


    public Address getDomicile() { 
     return domicile; 
    } 

    public void setDomicile(final Address domicile) { 
     this.domicile = domicile; 
    } 

    public Address getCorrespondence() { 
     return correspondence; 
    } 

    public void setCorrespondence(final Address correspondence) { 
     this.correspondence = correspondence; 
    } 

} 

public class Address { 

    private String streetName = null; 

    public String getStreetName() { 
    return streetName; 
    } 

public void setStreetName(final String streetName) { 
    this.streetName = streetName; 
} 

} 

私はどのように実装することができ、 JSR 303のアプローチを使用して、domicileアドレスを参照する場合、streetNameが空であってはならないというルール

このように検証を実行 私は検証の失敗を取得する必要があります(住所アドレスの通りがnullの場合):

Person p = new Person(); 

Address a = new Address(); 
a.setStreetName("some street"); 
p.setCorrespondence(a); 

a = new Address(); 
p.setDomicile(a); 

validator.validate(p); 

バリデータは、Beanの人に対して呼び出されます。 このデザインによれば、2 Addressesインスタンス(Personクラス内)にいくつかの注釈を定義し、streetNameフィールド自体(NotBlankなど)で定義されているいくつかの制約にこの情報をどのように渡すべきかを定義する必要があると思いますそのようにする方法を知っている。

私はJSR 303グループの手法について認識していますが、私の特別な要件には適していないようです。

答えて

0

解決策は、カスタムバリデーターを書き込むことです。これは、Personクラスのレベルで適用されます。

@ValidateAddress 
public class Person { 

    private Address domicile = null; 
    private Address correspondence = null; 

    //.... 
} 

このようなバリデーターは両方のフィールドにアクセスでき、nullでないことを検証できます。

+0

ありがとうございました。 –

関連する問題