【发布时间】:2020-02-21 15:39:28
【问题描述】:
当字段设置为now 时,我需要@Past 来出错。我意识到字段上的now 值和验证器比较时使用的now 值会略有不同,因此需要在休眠验证器中设置容差。
问题是我无法让它工作。这是junit:
@Test
public void testHibernateValidator_withPast_withTodayDate() {
// populates with 'now'
MyFormWithPast form = new MyFormWithPast();
form.setDt(OffsetDateTime.now(Clock.systemUTC()));
ValidatorFactory factory = Validation.byProvider(HibernateValidator.class)
.configure()
.clockProvider(() -> Clock.systemUTC())
// adds tolerance so that when comparing, the form dt and 'now' is considered equal,
// therefore dt is not a past datetime
.temporalValidationTolerance(Duration.ofMinutes(1))
.buildValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<MyFormWithPast>> errors = validator.validate(form);
// needs to fail, since 'now' shouldn't be considered 'past'
assertFalse("now shoudnt be considered as Past", errors.isEmpty());
}
public static class MyFormWithPast {
@Past
private OffsetDateTime dt;
public void setDt(OffsetDateTime dt) {
this.dt = dt;
}
public OffsetDateTime getDt() {
return dt;
}
}
我希望当我在字段中输入“现在”时验证会失败,因为“现在”不应该被视为“过去”。我错过了什么?
【问题讨论】:
标签: bean-validation hibernate-validator