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

gst*_*low 6 java validation date spring-mvc hibernate-validator

我有以下bean:

class CampaignBeanDto {

    @Future
    Date startDate;

    Date endDate;

    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

我怎样才能实现它?

Nei*_*gan 6

你将不得不忍住并为自己写一个验证者.

这应该让你开始:

使用Hibernate Validator进行交叉字段验证(JSR 303)


小智 6

您不应使用注释进行跨字段验证,而应编写验证函数。在问题的答案中进行了解释,使用 Hibernate Validator (JSR 303) 进行跨字段验证

例如编写一个如下的验证器函数:

public class IncomingData {

  @FutureOrPresent
  private Instant startTime;

  @Future
  private Instant endTime;

  public Boolean validate() {
      return startTime.isBefore(endTime);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在第一次接收数据时调用验证器函数:

if (Boolean.FALSE.equals(incomingData.validate())) {
  response = ResponseEntity.status(422).body(UNPROCESSABLE);
}
Run Code Online (Sandbox Code Playgroud)