在JavaBean验证器中使用类参数

u5rb5r59  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(307)

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

public class person{

       @NotNull
       @NotEmpty
       public int age;

       @CustomValidator(Parameter = age)
       public dateTime birthdate

    }

那么定制验证器可以使用年龄来验证生日,有没有办法做到这一点,或者JavaBeans不允许这样做?我已经试过只输入参数,它似乎不喜欢这样。请帮忙。

flvlnr44

flvlnr441#

我不认为有一种方法可以将其作为注解本身的参数来实现,因为这要求这些值是静态的—您希望它基于年龄的值是动态的。
您可以将它放在类级别,而不是将自定义约束放在birthdate字段本身。通过这样做,您可以访问person对象中的所有字段,并且可以根据提供的年龄验证出生日期。我测试了一个字符串类型的生日,所以你将不得不修改,以满足您的日期需要。
出生日期约束.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     
    }
}

个人.java-

import javax.validation.constraints.Min;

@BirthdateConstraint
public class Person {

    @Min(value = 1) 
    public int age;

    public String birthdate;
}

相关问题