假设我们有一个扩展另一个对象的对象,并且我想为这两个对象创建自定义验证,例如:Period和PeriodAmount对象。期间为:
public class Period {
private LocalDate startDate;
private LocalDate endDate;
PeriodAmount为:
public class PeriodAmount extends Period {
private BigDecimal amount;
我有一个用于Period的自定义验证器,如下所示:
public class PeriodValidator implements ConstraintValidator<ValidPeriod,Period> {
@Override
public boolean isValid(Period period,ConstraintValidatorContext context) {
LocalDate startDate = period.getStartDate();
LocalDate endDate = period.getEndDate();
if (startDate == null) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("{invalid.start.date.null}").addConstraintViolation();
return false;
}
if (endDate != null && startDate.isAfter(endDate)) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("{invalid.end.date.value}").addConstraintViolation();
return false;
}
return true;
}
}
这非常适合期间。但是现在我想要一个针对PeriodAmount的自定义验证器,并且我想重用我已经用于Period验证的代码。我该怎么做才能只调用一个验证并验证所有内容:
@ValidPeriodAmount
private PeriodAmount periodAmount;