我看过互联网,但我找不到任何解决我的问题的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不能为空?
例如像这样运行验证我应该得到验证失败(住所地址的街道为空):
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组技术,但它似乎不适合我的特殊要求。
解决方案是编写自定义验证器,它将应用于Person类的级别。
@ValidateAddress
public class Person {
private Address domicile = null;
private Address correspondence = null;
//....
}
这样的验证器可以访问这两个字段,并可以验证哪个非空。