Я не думаю, что есть способ реализовать его в качестве параметра в самой аннотации, поскольку для этого необходимо, чтобы эти значения были статичны c - вы хотите, чтобы оно было динамическим c в зависимости от значения возраста.
Вместо того, чтобы устанавливать собственное ограничение на само поле birthdate , вы можете поместить его на уровне класса. Делая это, вы получаете доступ ко всем полям объекта Person и можете сделать логи c для проверки даты рождения на основе указанного возраста. Я проверил это с типом String для дата рождения , поэтому вам придется изменить его в соответствии с вашими требованиями.
Ограничение даты рождения. 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 {};
}
Подтверждение даты рождения. java -
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
}
}
Персона. java -
import javax.validation.constraints.Min;
@BirthdateConstraint
public class Person {
@Min(value = 1)
public int age;
public String birthdate;
}