【发布时间】:2014-06-11 17:24:20
【问题描述】:
我目前正在实现一个应用程序,该应用程序存储包含国外和国内地址的联系信息,但地址也可以禁用。
我试图定义三个验证组:一个用于始终验证信息的超组和两个用于不同地址状态的子类。
public interface ContactValidation {}
public interface DomesticValidation extends ContactValidation {}
public interface ForeignValidation extends ContactValidation {}
然后我在联系人类上定义了一个@GroupSequenceProvider。
public class ContactGroupSequenceProvider implements DefaultGroupSequenceProvider<Contact> {
@Override
public List<Class<?>> getValidationGroups(Contact contact) {
List<Class<?>> defaultGroupSequence = new ArrayList<Class<?>>();
if(contact.getIsForeign()){
defaultGroupSequence.add(Contact.ForeignValidation.class);
} else {
defaultGroupSequence.add(Contact.DomesticValidation.class);
} //TODO: Add Address Disabled Case
defaultGroupSequence.add(Contact.class); //Get a GroupDefinitionException without this line
return defaultGroupSequence;
}
当我使用任一地址验证运行程序时,标记为 groups=Contact.ContactValidation.class 的字段不会被验证,即使它是地址验证的超类。
我需要这个应用程序一起验证,这样用户就不必修复错误、提交并获取新错误。
我还想避免使用始终经过验证的字段的解决方案。
@NotBlank(groups={DomesticValidation.class,ForeignValidation.class ,ContactValidation.class})
private String fullContactName;
任何建议表示赞赏!
【问题讨论】:
-
我的问题是stackoverflow.com/questions/21363481/…版本4.3.1.Final也有同样的问题
标签: java validation inheritance bean-validation hibernate-validator