Java. Как обозначить аннотацией, что дата не раньше определённой?
У меня есть класс Film, у которого поле типа LocalDate должно быть не раньше 28 декабря 1895 года. Я использую следующую библиотеку javax.validation.constraints, где представлены @Past, @Future, @FutureOrPresent, @PastOrPresent. Возможно проблема решается созданием собственной аннотации? Подскажите пожалуйся, где об этом почитать.
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.time.LocalDate;
@Data
@EqualsAndHashCode(exclude = {"id"})
public class Film {
private int id = 0;
@NotBlank
private final String name;
@Size(max=200)
private final String description;
@Future
private final LocalDate releaseDate;
@Positive
private final int duration;
}
Ответы (1 шт):
Автор решения: Руслан Мамедов
→ Ссылка
Для таких целей придется создать свою кастомную аннотацию и валидатор. Пример статьи на эту тему
Класс аннотации
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MinimumDateValidator.class)
@Past
public @interface MinimumDate {
String message() default "Date must not be before {value}";
Class<?>[] groups() default {};
Class<?>[] payload() default {};
String value() default "1895-12-28";
}
Кастомный класс валидатора, который будет эту аннотацию обрабатывать
public class MinimumDateValidator implements ConstraintValidator<MinimumDate, LocalDate> {
private LocalDate minimumDate;
@Override
public void initialize(MinimumDate constraintAnnotation) {
minimumDate = LocalDate.parse(constraintAnnotation.value());
}
@Override
public boolean isValid(LocalDate value, ConstraintValidatorContext context) {
return value == null || !value.isBefore(minimumDate);
}
}
Пример использования
public class Person {
@MinimumDate
private LocalDate birthDate;
}