在Java的自定义注释中,组和负载有什么用途?
这是我的密码, 我试着在网上读很多东西,但无法理解它的实际用途在Java的自定义注释中,组和负载有什么用途?,java,spring,spring-mvc,annotations,Java,Spring,Spring Mvc,Annotations,这是我的密码, 我试着在网上读很多东西,但无法理解它的实际用途 Class<?> [] groups() default{}; Class<? extends Payload>[] payload() default{}; Class[]groups()默认值{}; 类[]组()默认值{}; 类组允许您限制验证期间应用的约束集。 在下面的示例中,AClass类具有属于AGroup组的bool属性。但是,如果未指定属性的组(如AClass的其他属性),则它属于默认组jav
Class<?> [] groups() default{};
Class<? extends Payload>[] payload() default{};
Class[]groups()默认值{};
类[]组()默认值{};
类组允许您限制验证期间应用的约束集。
在下面的示例中,AClass
类具有属于AGroup
组的bool
属性。但是,如果未指定属性的组(如AClass
的其他属性),则它属于默认组javax.validation.groups.default
import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
public class AClass {
@NotBlank
private String string;
@Min(2)
private int integer;
@AssertTrue(groups = AGroup.class)
private boolean bool;
public AClass(String string, int integer, boolean bool) {
this.string = string;
this.integer = integer;
this.bool = bool;
}
}
组声明可以是简单的空接口
public interface AGroup { }
在下面的程序中,validate
方法验证属于默认组的所有属性。但要验证其他组的属性,必须在validate
方法中指定要验证的属性组
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import org.junit.Assert;
public class Program {
public static void main(String[] args) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
// create a AClass and check that everything is ok with it.
AClass a = new AClass("Foo", 2, false);
Set<ConstraintViolation<AClass>> constraintViolations = validator.validate(a);
Assert.assertEquals(0, constraintViolations.size());
// but has it passed the bool field?
constraintViolations = validator.validate(a, AGroup.class);
Assert.assertEquals(1, constraintViolations.size());
Assert.assertEquals("must be true", constraintViolations.iterator().next().getMessage()
);
}
}
执行ErrorEmailSender
有效负载:
import javax.validation.ConstraintViolation;
import javax.validation.Payload;
public class ErrorEmailSender implements Payload {
public void onError(ConstraintViolation violation) {
System.out.println("Sending email to support team: "
+ violation.getPropertyPath() + " "
+ violation.getMessage());
}
}
Client
程序检查TestBean
实例是否有效,如果无效,则调用无效属性的Payload
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
public class Client {
public static void main(String[] args) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
TestBean bean = new TestBean();
Set<ConstraintViolation<TestBean>> constraintViolations = validator.validate(bean);
if (constraintViolations.size() > 0) {
constraintViolations.stream().forEach(Client::processError);
} else {
//proceed using user object
System.out.println(bean);
}
}
private static void processError(ConstraintViolation<TestBean> violation) {
violation.getConstraintDescriptor().getPayload().forEach(p -> {
if (ErrorEmailSender.class.isAssignableFrom(p)) {
try {
((ErrorEmailSender) p.getDeclaredConstructor().newInstance()).onError(violation);
} catch (Exception ex) {
System.out.println(ex);
}
}
});
}
}
资料来源:
import javax.validation.ConstraintViolation;
import javax.validation.Payload;
public class ErrorEmailSender implements Payload {
public void onError(ConstraintViolation violation) {
System.out.println("Sending email to support team: "
+ violation.getPropertyPath() + " "
+ violation.getMessage());
}
}
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
public class Client {
public static void main(String[] args) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
TestBean bean = new TestBean();
Set<ConstraintViolation<TestBean>> constraintViolations = validator.validate(bean);
if (constraintViolations.size() > 0) {
constraintViolations.stream().forEach(Client::processError);
} else {
//proceed using user object
System.out.println(bean);
}
}
private static void processError(ConstraintViolation<TestBean> violation) {
violation.getConstraintDescriptor().getPayload().forEach(p -> {
if (ErrorEmailSender.class.isAssignableFrom(p)) {
try {
((ErrorEmailSender) p.getDeclaredConstructor().newInstance()).onError(violation);
} catch (Exception ex) {
System.out.println(ex);
}
}
});
}
}
Sending email to support team: str must not be null