在JavaBean验证程序中使用类参数

在JavaBean验证程序中使用类参数,java,validation,javabeans,Java,Validation,Javabeans,我有一个类,我在使用JavaBean验证,我想使用其中一个类变量作为验证器中的参数,所以如果我有类似的东西 public class person{ @NotNull @NotEmpty public int age; @CustomValidator(Parameter = age) public dateTime birthdate } 然后自定义验证器可以使用年龄来验证生日,有没有办法做到这一点,

我有一个类,我在使用JavaBean验证,我想使用其中一个类变量作为验证器中的参数,所以如果我有类似的东西

    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;
}