在 Java Bean Validator 中使用 Class 参数

Use Class Paramater in Java Bean Validator

我有一个 class 并且我正在使用 Java Bean 验证并且我想使用 classes 变量之一作为验证器中的参数,所以如果我有一些东西看起来像

    public class person{

       @NotNull
       @NotEmpty
       public int age;

       @CustomValidator(Parameter = age)
       public dateTime birthdate

    }

然后自定义验证器可以使用年龄来验证生日,有没有办法做到这一点或做 java bean 不允许这样做?我已经尝试过只输入参数,但它似乎并不喜欢那样。请帮忙。

我认为没有办法将它实现为注释本身中的参数,因为这要求这些值是静态的——您希望它是基于年龄值的动态值。

您可以将自定义约束放在 birthdate 字段本身,而不是放在 class 级别。通过这样做,您可以访问 Person 对象中的所有字段,并且可以执行逻辑以根据提供的年龄验证生日。我用 birthdate 的字符串类型对此进行了测试,因此您必须修改它以满足您的日期需求。

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

BirthdateValidator.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     
    }
}

Person.java -

import javax.validation.constraints.Min;

@BirthdateConstraint
public class Person {

    @Min(value = 1) 
    public int age;

    public String birthdate;
}