Используйте Paramater класса в Java Bean Validator - PullRequest
0 голосов
/ 24 января 2020

У меня есть класс, и я использую Java Проверка бина, и я хотел бы использовать одну из переменных классов в качестве параметра в валидаторе, поэтому, если у меня есть что-то похожее.

    public class person{

       @NotNull
       @NotEmpty
       public int age;

       @CustomValidator(Parameter = age)
       public dateTime birthdate

    }

Тогда пользовательский валидатор может использовать возраст для проверки даты рождения, есть ли способ сделать это или бобы java не позволяют это сделать? Я уже пытался просто ввести параметр, и это не похоже на это. Пожалуйста, помогите.

1 Ответ

1 голос
/ 25 января 2020

Я не думаю, что есть способ реализовать его в качестве параметра в самой аннотации, поскольку для этого необходимо, чтобы эти значения были статичны 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;
}
...