为什么 JSR303 自定义注解的约束组必须默认为空数组?

The*_*Huy 5 custom-validators bean-validation

我正在为特定约束组(不是默认值)编写自定义验证器,但运行时给了我以下错误。

我只是好奇为什么他们需要默认值为空。感谢您能分享您的意见。谢谢 :)

xxx.model.validation.CustomValidation包含Constraint注解,但是groups参数默认值不是空数组。

StackTrace: org.hibernate.validator.metadata.ConstraintHelper.assertGroupsParameterExists(ConstraintHelper.java:335) org.hibernate.validator.metadata.ConstraintHelper.isConstraintAnnotation(ConstraintHelper.java:282)

Alf*_*Alf 2

我无法弄清楚在哪种情况下将约束绑定到特定组会很有用。

组用于部分验证(和序列验证)。如果类中有 10 个字段,则可以用A标记其中 8 个字段,用B标记2 个字段。然后您可以决定仅验证A组或B组中的字段。相反,您希望它属于名为C@MyConstraint的特定组。这个不成立。组或多或少是一个名称,用于将某些字段与同一类中的其他字段区分开来。它没有绝对的意义。组在验证中有用,而不是在约束定义中有用,它们与字段相关,而不与约束相关。

此外,如果您在约束定义中隐藏组名称,您可能会遇到错误,因为您可能会认为所有字段都是一起验证的。

@Email
private String mail;

@Password
private String pass;

@VAT
private String vatCode;
Run Code Online (Sandbox Code Playgroud)

您能看到是否有部分验证吗?

编辑

关于第二条评论:假设您有一个具有 5 个字段且完全没有约束的类。其中三个是整数。如果您想验证这三个字段的总和,您必须按照您的建议创建一个类级约束。通过这种方式,您的自定义注释将应用于类而不是字段,那么如何在字段上定义组呢?

相反,你可以使用这样的东西:

@Sum(min = 250, fields = {"length", "width", "height"})
public class MyClass {
    private String type;
    private String code;
    private int length;
    private int width;
    private int height;
        ...
}
Run Code Online (Sandbox Code Playgroud)