如何在hibernate验证器上验证所有组?

时间:2015-04-23 19:52:49

标签: java hibernate validation annotations

我想要验证这个模型:

public class ClientDomain {

    public interface AddValidations {
    }

    public interface UpdateValidations {
    }

    private String id;

    @NotNull(groups = {ClientDomain.AddValidations.class})
    @Size(min = 2, max = 10, groups = {ClientDomain.AddValidations.class})
    private String name;

    @NotNull(groups = {ClientDomain.UpdateValidations.class})
    private ClientType type;

    @NotNull(groups = {ClientDomain.AddValidations.class})
    private Gender gender;

.....
}

然后,我正在验证它:

Set<ConstraintViolation<Object>> violations = this.validator.validate(clientDomain);

这不起作用,因为我知道这是因为所有约束验证都属于某些组,然后当我不通过组进行验证时,验证器默认采用javax.validation.group.Default那么它什么都没有验证,我是对的?如果是这样,那么有没有办法验证所有约束验证,无论它们属于哪个组?此致!

PD:很明显,我不想这样做:

Set<ConstraintViolation<Object>> violations = this.validator.validate(clientDomain, ClientDomain.AddValidations, ClientDomain.UpdateValidations);

1 个答案:

答案 0 :(得分:3)

如何使用继承呢?

如果ClientDomain是您的父接口。你可以这样做:

&GT;&GT;当:

public interface ClientDomain extends Default {} 
public interface AddValidation extends ClientDomain
public interface UpdateValidation extends ClientDomain

&GT;&GT;那么

 @NotNull(groups = {UpdateValidations.class})
 private ClientType type;

 @NotNull
 private Gender gender;

在此示例中,Gender是两个组的强制约束。另一方面,ClientType仅适用于UpdateValidation。您将编写更少的代码,并且阅读起来也更干净。

顺便说一下。在此示例中,ClientDomain不是必需的。这只是为了更好的想象力来展示你可以用它做什么。

更多详情:hibernate validator docs