通过编写自定义ConstraintValidator实现类来实现此功能。以下是示例代码:
首先,创建一个注释类,以添加一个前缀,并将其应用于一个嵌套对象:
@Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = {PrefixValid.PrefixValidator.class}) public @interface PrefixValid {
String message() default "Invalid object";
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
String prefix() default "";
Class>[] targetClasses() default {};
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface List {
PrefixValid[] value();
}
class PrefixValidator implements ConstraintValidator {
private String prefix;
private Class>[] targetClasses;
private Validator validator;
@Override
public void initialize(PrefixValid prefixValid) {
this.prefix = prefixValid.prefix();
this.targetClasses = prefixValid.targetClasses();
validator = Validation.buildDefaultValidatorFactory().getValidator();
}
@Override
public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
boolean result = true;
if (o != null) {
Set> violations = validator.validate(o, targetClasses);
if (!violations.isEmpty()) {
result = false;
for (ConstraintViolation
}
然后,在嵌套对象的类上使用此注释:
public class Person {
@PrefixValid(prefix = "Address: ")
private Address address;
//...
}
最后,通过使用bean validation设置来启用它:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set
完整示例代码可在以下位置找到:https://github.com/jee76/Bean-validation-nested-object-prefix-validation。