Bean Validation Groupinheritance不适用于Group Sequence Provider

我目前正致力于实现一个存储包含国内和国内地址的联系信息的应用程序,但也可以禁用地址。

我试图定义三个validation组:一个用于始终validation信息的超级组和两个用于不同地址状态的子类。

public interface ContactValidation {} public interface DomesticValidation extends ContactValidation {} public interface ForeignValidation extends ContactValidation {} 

然后我在联系人类上定义了一个@GroupSequenceProvider。

 public class ContactGroupSequenceProvider implements DefaultGroupSequenceProvider { @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; } 

当我使用地址validation运行程序时,标记为groups = Contact.ContactValidation.class的字段即使它是地址validation的超类,也不会被validation。

我需要此应用程序一起validation,因此使用的不必修复错误,提交并获取新错误。

我也想避免使用总是经过validation的字段的解决方案。

 @NotBlank(groups={DomesticValidation.class,ForeignValidation.class ,ContactValidation.class}) private String fullContactName; 

任何建议赞赏!

如果您返回其中一个子类,我还希望validation标记为ContactValidation的约束。 这似乎是Hibernate Validator中的一个错误,所以你能在我们的问题跟踪器中打开一张票吗?

作为解决方法,您可能会尝试将ContactValidation明确添加到您返回的列表中。