@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=FileSizeConstraintValidator.class)
public @interface FileSize {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
long min() default 1;
long max() default Long.MAX_VALUE;
}
надо чтобы при ошибке валидации выбрасывало сообщение, содержащее значения из max() и min(). Т.е. условно message() выглядело так:
String message() default "Значение должно быть не меньше " + min() + "и не больше" + max() ;
но т.к. поля аннотации должны быть final, напрямую так при объявлении аннотации сделать нельзя. Вот надо понять как это сделать не напрямую. Например, как в случае с size.
Dmitry Roo, валидатор я знаю как написать. Тут проблема глубже.
Немного разобрался.
В случае ошибки валидации выбрасывается MethodValidationException. Этот класс содержит ParameterValidationResult, который пропускает ошибки валидации через MessageSourceResolvable. MessageSourceResolvable используется MessageSource при выводе сообщений. Получается надо написать кастомный MessageSourceResolvable и сделать так, чтобы он использовался в MethodValidationException. Как сделать так, чтобы он использовался внутри MethodValidationException я пока так и не понял.
Василий Банников, ну меня интересует в плане поиска работы. Насколько это востребованно у работодателей. Поиск по ключевым словамт дает меньше 10 вакансий на хх
Это странно. Enum - это класс. Если я определяю свой конструктор, то там должно быть столько параметров, сколько я указал. Даже если представить, что Enum в моем конструкторе неявно сперва вызывает конструктор по умолчанию и туда передает параметры типа String и int, то всё равно соответствующие параметры должны быть мной определены в моем конструкторе сперва. А тут получается что он сам из ниоткуда прикрепляет 2 параметра плюсом.
надо чтобы при ошибке валидации выбрасывало сообщение, содержащее значения из max() и min(). Т.е. условно message() выглядело так:
но т.к. поля аннотации должны быть final, напрямую так при объявлении аннотации сделать нельзя. Вот надо понять как это сделать не напрямую. Например, как в случае с size.