为了账号安全,请及时绑定邮箱和手机立即绑定

Spring注解方法目的

Spring注解方法目的

FFIVE 2023-04-13 15:03:45
我为 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 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

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 接口:


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   

        }

    }

}


查看完整回答
反对 回复 2023-04-13
  • 1 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信