在JavaBean验证程序中使用类参数
我有一个类,我在使用JavaBean验证,我想使用其中一个类变量作为验证器中的参数,所以如果我有类似的东西在JavaBean验证程序中使用类参数,java,validation,javabeans,Java,Validation,Javabeans,我有一个类,我在使用JavaBean验证,我想使用其中一个类变量作为验证器中的参数,所以如果我有类似的东西 public class person{ @NotNull @NotEmpty public int age; @CustomValidator(Parameter = age) public dateTime birthdate } 然后自定义验证器可以使用年龄来验证生日,有没有办法做到这一点,
public class person{
@NotNull
@NotEmpty
public int age;
@CustomValidator(Parameter = age)
public dateTime birthdate
}
然后自定义验证器可以使用年龄来验证生日,有没有办法做到这一点,或者JavaBeans不允许这样做?我已经试过输入参数了,但似乎不喜欢这样。请提供帮助。我认为没有办法将其作为注释本身的参数来实现,因为这要求这些值是静态的-您希望它基于年龄值是动态的 您可以将自定义约束放在类级别,而不是放在birthdate字段本身。通过这样做,您可以访问Person对象中的所有字段,并且可以根据提供的年龄执行逻辑来验证生日。我用生日的字符串类型测试了这个,所以你必须修改它以满足你的约会需求 BirthdateConstraint.java-
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = BirthdateValidator.class)
public @interface BirthdateConstraint {
String message() default "Custom error message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class BirthdateValidator implements ConstraintValidator<BirthdateConstraint, Person> {
@Override
public boolean isValid(Person value, ConstraintValidatorContext context) {
int age = value.age;
String birthdate = value.birthdate;
// do validation logic here - return true/false
}
}
import javax.validation.constraints.Min;
@BirthdateConstraint
public class Person {
@Min(value = 1)
public int age;
public String birthdate;
}