【问题标题】:how to validate all groups on hibernate validator?如何验证休眠验证器上的所有组?
【发布时间】:2015-04-23 19:52:48
【问题描述】:

我有这个模型,我想验证:

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);

【问题讨论】:

    标签: java hibernate validation annotations


    【解决方案1】:

    如何使用继承呢?

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

    >> 何时:

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

    >> 然后

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

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

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

    更多详情:hibernate validator docs

    【讨论】:

    • 谢谢!我认为还有另一个没有修改接口。但这最后还不错。问候
    • 不客气!老实说,我认为这种方法非常好。接口用作简单的标记接口并用作验证方面。这样一来,您就可以清楚地分离数据和约束。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    相关资源
    最近更新 更多