Inheritance JSR303基于实例的对象上的不同规则

Inheritance JSR303基于实例的对象上的不同规则,inheritance,bean-validation,Inheritance,Bean Validation,我在网上查过,但在JSR303上找不到任何解决我问题的例子 假设您有以下类(此设计无法更改!): 有住所和通信地址的人员代表如下: public class Person { private Address domicile = null; private Address correspondence = null; public Address getDomicile() { return domicile; } public v

我在网上查过,但在JSR303上找不到任何解决我问题的例子

假设您有以下类(此设计无法更改!):

有住所和通信地址的人员代表如下:

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;
 }

}
我如何使用JSR303方法实现一条规则,即如果街道名称指的是住所地址,则街道名称不得为空

e、 g。 运行这样的验证时,我应该会遇到验证失败(住所地址的街道为空):

对bean人员调用验证程序。 根据这种设计,我认为我应该在2个Addresses实例(在Person类中)上定义一些注释,以及在某些情况下如何将这些信息传递给streetName字段本身上定义的约束(例如NotBlank),但我不知道如何做


我知道JSR303组技术,但它似乎不适合我的特殊要求。

解决方案是编写自定义验证器,它将应用于Person类级别

@ValidateAddress
public class Person {

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

    //....
}
这样的验证器可以访问这两个字段,并且可以验证不为null的字段

@ValidateAddress
public class Person {

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

    //....
}