JSR 303基于实例的对象的不同规则

时间:2012-03-08 15:22:34

标签: inheritance bean-validation

我看过互联网,但我找不到任何解决我问题的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方法实现一条规则,即如果streetName引用了住所地址,则该路径名不能为空?

e.g。 运行这样的验证我应该得到验证失败(住所地址的街道为空):

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 Person调用验证器。 根据这个设计,我认为我应该在2个地址实例(在Person类中)定义一些注释,并且在某些情况下应该如何将这些信息传递给streetName字段本身定义的某个约束(例如NotBlank)但是我不知道我知道该怎么做。

我知道JSR 303群体技术,但它似乎不适合我的特殊要求。

1 个答案:

答案 0 :(得分:0)

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

@ValidateAddress
public class Person {

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

    //....
}

这样的验证器可以访问这两个字段,并且可以验证哪个非空。