При использовании javax.validation дата подтверждения должна быть не менее 1900-01-01 - PullRequest
0 голосов
/ 18 января 2019

У меня есть класс, который работает как полезная нагрузка для моего API.Мне нужно проверить одно из моих полей "dateOfBirth".Используя javax.validation.past, я проверяю, что дата не является будущей датой, но я также хочу подтвердить, что эта дата не должна быть меньше 1900-01-01.

Есть ли способ использовать javax.validation api, мы можем это сделать?

Class Employee{

 ----
 ---
  @Past(message="date of birth must be less than today")  
  @DateTimeFormate( pattern="yyyy-MM-dd")
  private Date dateOfBirth;

  //constuctor

  //getter & setter

}

1 Ответ

0 голосов
/ 18 января 2019

Вы должны определить пользовательскую аннотацию для этого предложения.что-то вроде ниже:

@Target(ElementType.FIELD)
@Retention(RUNTIME)
@Constraint(validatedBy = DateValidator.class)
@Documented
public @interface IsAfter{
   String message() default "{message.key}";
   String current();
}

, а также определите пользовательский валидатор, например:

public class DateValidator implements ConstraintValidator<IsAfter, LocalDate> {

String validDate;

@Override
public void initialize(IsAfter constraintAnnotation) {
    validDate = constraintAnnotation.current();
}

@Override
public boolean isValid(LocalDate date, ConstraintValidatorContext constraintValidatorContext) {
    String[] splitDate = validDate.split("-");
    return date.isAfter(LocalDate.of(Integer.valueOf(splitDate[0]), Integer.valueOf(splitDate[1]), Integer.valueOf(splitDate[2])));
  }
}

и используйте эту аннотацию:

@Past(message="date of birth must be less than today")  
@IsAfter(current = "1900-01-01")
@DateTimeFormate( pattern="yyyy-MM-dd")
private Date dateOfBirth;

примечание: я не проверял эту аннотацию!

...