我有以下bean:
class CampaignBeanDto {
@Future
Date startDate;
Date endDate;
...
}
显然,endDate
应该在startDate之后。我想验证它。
我知道我可以手动实现@FutureAfterDate
的注释,为此验证器并手动初始化阈值日期,但我想使用@Validated
spring mvc注释。
我怎样才能实现它?
答案 0 :(得分:6)
答案 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);
}