5

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

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

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)

4

1 回答 1

2

我不知道在哪种情况下将约束绑定到特定组会很有用。

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

此外,如果您在约束定义中隐藏组名,您可能会遇到错误,因为您可以认为这些字段都经过了验证。

@Email
private String mail;

@Password
private String pass;

@VAT
private String vatCode;

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

编辑

关于第二条评论:假设您有一个包含 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;
        ...
}
于 2012-08-02T13:56:51.887 回答