我们有一个用例,其中我们有一个结构相当糟糕的 bean,其中包含如下字段:
public class DataBean {
private boolean flag1;
private boolean flag2;
private String phone1;
private String address1;
private String city1;
private String state1;
private String phone2;
private String address2;
private String city2;
private String state2;
}
仅当标志 [1|2] 为真时,我们才需要验证电话/地址/城市/州 [1|2]。糟糕,糟糕的设计,理所当然。
我们当前的策略是在每个“真实”数据字段上使用@NotNull(或我们需要的任何验证),并使用组指示符,如下所示:
public class DataBean {
private boolean flag1;
private boolean flag2;
@NotNull(groups = Info.First.class)
private String phone1;
@NotNull(groups = Info.First.class)
private String address1;
@NotNull(groups = Info.First.class)
private String city1;
@NotNull(groups = Info.First.class)
private String state1;
@NotNull(groups = Info.Second.class)
private String phone2;
@NotNull(groups = Info.Second.class)
private String address2;
@NotNull(groups = Info.Second.class)
private String city2;
@NotNull(groups = Info.Second.class)
private String state2;
}
在我们验证此 bean 的业务逻辑中(其中包含将由“默认”验证组验证的各种其他字段),我们将违反“默认”组,然后检查 flag1 是否为真,如果因此,对 Info.First.class 运行验证,检查 flag2 是否为真,然后对 Info.Second.class 运行验证。
现在的问题......有没有办法从自定义类验证器中连接到这些组?我设想有一个类验证器,它采用 flag1/flag2 属性及其相应的自定义组,当调用 isValid 时,它会为这些组执行这些二级/三级调用。简单地说,目的是自定义类验证器将位于默认组中,因此验证此类的业务逻辑不会因为必须单独调用验证而将这种丑陋的遗留设计的细节泄漏到其中。
想法?谢谢!