将来如何参考另一个日期来验证该日期?
How to validate that date in future in reference to another date?
我有以下 bean:
class CampaignBeanDto {
@Future
Date startDate;
Date endDate;
...
}
显然我认为 endDate
应该在 startDate 之后。我想验证一下。
我知道我可以手动实现 @FutureAfterDate
的注释,为此验证器并手动初始化阈值日期,但我想使用 @Validated
spring mvc 注释。
如何实现?
您将不得不承受并为自己编写一个验证器。
这应该让你开始:
Cross field validation with Hibernate Validator (JSR 303)
您不应使用注释进行跨字段验证,而应编写验证函数。在 this Answer to the Question, 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);
}
我有以下 bean:
class CampaignBeanDto {
@Future
Date startDate;
Date endDate;
...
}
显然我认为 endDate
应该在 startDate 之后。我想验证一下。
我知道我可以手动实现 @FutureAfterDate
的注释,为此验证器并手动初始化阈值日期,但我想使用 @Validated
spring mvc 注释。
如何实现?
您将不得不承受并为自己编写一个验证器。
这应该让你开始:
Cross field validation with Hibernate Validator (JSR 303)
您不应使用注释进行跨字段验证,而应编写验证函数。在 this Answer to the Question, 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);
}