【问题标题】:Bean Validation Group inheritance isn't working with Group Sequence ProviderBean Validation Group 继承不适用于 Group Sequence Provider
【发布时间】: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;

任何建议表示赞赏!

【问题讨论】:

标签: java validation inheritance bean-validation hibernate-validator


【解决方案1】:

如果您返回其中一个子类,我还希望用ContactValidation 标记的约束得到验证。这似乎是 Hibernate Validator 中的一个错误,所以你能在我们的issue tracker 中开一张票吗?

作为一种变通方法,您可以尝试将ContactValidation 显式添加到您返回的列表中。

【讨论】:

  • 感谢您的回复,如果这是一个错误,那么我会暂时解决它。我公司目前使用的是4.2.0版本的Hibernate。你知道这个问题是否在以后的版本中得到修复?否则我会为它开张票。
  • 我不记得在这方面有任何修复,但如果你可以用 5.1 测试它并在它仍然存在时创建一个问题,那将非常有帮助。
猜你喜欢
  • 1970-01-01
  • 2020-08-17
  • 2011-03-12
  • 2021-07-04
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 2021-01-26
相关资源
最近更新 更多