使用javax.validation验证日期不得少于1900-01-01

时间:2019-01-18 16:16:59

标签: java spring-boot datetime request javax.validation

我有一个类正在充当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 :(得分:0)

您应该为此提案定义自定义注释。像下面这样:

@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;

注意:我尚未测试此注释!