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