Spring 注释方法目的

Spring annotation method purpose

我为 spring 项目编写了简单的验证注释。问题是我不明白某些方法的目的。 这是我的注释:

@Constraint(validatedBy = PostCodeValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PostCode {
    public String value() default "LUV";
    public String message() default "must start with LUV";
    public Class<?>[] groups() default {};
    public Class<? extends Payload>[] payload() default {};

}

谁能解释一下 groups() & payload() 方法的目的?如果解释尽可能简单,我将不胜感激。谢谢

1) 在 Bean Validation Api 中,组用于选择要验证的 bean 字段。示例:地址为 属性 的用户。

public class User {
    @NotNull(groups = GroupUser.class)
    String firstname;
    @NotNull(groups = GroupAddress.class)
    String street;
    @NotNull(groups = GroupAddress.class)
    String city;
}

要验证整个用户,您可以执行以下操作:

Set<ConstraintViolation<User>> constraintViolations = validator.validate(user, GroupUser.class, GroupAddress.class);

要仅验证没有地址部分的用户信息,您可以使用:

Set<ConstraintViolation<User>> constraintViolations = validator.validate(user, GroupUserName.class);

2) Payload 用于管理错误的严重级别。您可以实现 Payload 接口:

public class Severity {
    public static class Info implements Payload {}
    public static class Error implements Payload {}
}

如果您将名字字段注释为:

@NotNull(payload = {Severity.Error.class})

然后在验证之后,您可以按严重性添加一些逻辑:

for (ConstraintViolation<TestBean> violation : constraintViolations) {
    Set<Class<? extends Payload>> payloads = violation.getConstraintDescriptor().getPayload();
    for (Class<? extends Payload> payload : payloads) {
        if (payload == Severity.Error.class) {
            // logic here   
        }
    }
}