Предположим, у нас есть объект, который расширяет другой, и я хочу создать пользовательскую проверку для обоих, например, объектов Period и PeriodAmount. Где Period:
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;