【问题标题】:Spring annotation method purposeSpring注解方法用途
【发布时间】:2019-07-23 06:50:50
【问题描述】:

我为 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() 方法的目的?如果解释尽可能简单,我将不胜感激。谢谢。

【问题讨论】:

标签: java annotations bean-validation


【解决方案1】:

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   
        }
    }
}

【讨论】:

  • 谢谢,您的回答很有帮助))
猜你喜欢
  • 2015-05-15
  • 2014-10-25
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
相关资源
最近更新 更多