如何在将来参考另一个日期验证该日期?

时间:2015-04-16 22:00:16

标签: java validation date spring-mvc hibernate-validator

我有以下bean:

class CampaignBeanDto {

    @Future
    Date startDate;

    Date endDate;

    ...
}

显然,endDate应该在startDate之后。我想验证它。

我知道我可以手动实现@FutureAfterDate的注释,为此验证器并手动初始化阈值日期,但我想使用@Validated spring mvc注释。

我怎样才能实现它?

2 个答案:

答案 0 :(得分:6)

你必须忍受并为自己写一个验证者。

这应该让你开始:

Cross field validation with Hibernate Validator (JSR 303)

答案 1 :(得分:2)

您不应将“注释”用于跨字段验证,而应编写验证函数。在this Answer中对问题Cross field validation with Hibernate Validator (JSR 303)进行了解释。

例如,编写这样的验证器函数:

public class IncomingData {

  @FutureOrPresent
  private Instant startTime;

  @Future
  private Instant endTime;

  public Boolean validate() {
      return startTime.isBefore(endTime);
  }
}

然后在首次接收数据时简单地调用验证器函数:

if (Boolean.FALSE.equals(incomingData.validate())) {
  response = ResponseEntity.status(422).body(UNPROCESSABLE);
}