В проекте Java + Spring у нас есть файл свойств, и я хотел бы добавить туда некоторые ограничения для ограничения длины текста (ограничение ввода для хранения в строке) в POJO, контейнере входящих данных; для чего я использую javax.validation.constraints.
Базовая версия без использования файла свойств для этого:
...
import lombok.Data;
import javax.validation.constraints.Size;
...
@Data
@NoArgsConstructor
public class DummyPojo {
@Size(min = 15, max = 100)
private String description;
...
public DummyPojo(...){...}
...
}
Из-за того, что он будет применяться к нескольким POJO с одинаковыми ограничениями, цель состоит в том, чтобы сохранить в одной уникальной точке значение минимального размера и значение максимального размера, об этом я подумал в файле свойств. Я думал, делая что-то вроде этого:
...
import lombok.Data;
import javax.validation.constraints.Size;
...
@Data
@NoArgsConstructor
public class DummyPojo {
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
@Autowired
private DataConstraintsProperties properties;
@Size(min = properties.getMinTextSize, max = properties.getMaxTextSize)
private String description;
...
public DummyPojo(...){...}
...
}
Но это не сработает, очевидно, действительно, для @Autowired потребуется что-то еще, например @Component или @Service Bean, а не @Data POJO.
Знаете ли вы, можно ли таким же образом сделать так, чтобы POJO мог загружать эти значения файла свойств во время объявления (хотя, боюсь, это невозможно), или мне следует использовать какой-либо другой метод (который считается элегантным с точки зрения SW Engineering, или, по крайней мере, , не считается антишаблон, например класс Константы)?
Большое спасибо и с наилучшими пожеланиями
добавьте свойство min и max в файл свойств, как показано ниже
min=8
max=19
и пройти это в своем классе pojo
@Value("${min}")
private String gMin;
@Value("${max}")
private String gMax;
и используйте эту переменную, как показано ниже.
@Size(min = gMin, max = gMax)
private String description;
Вам не нужно импортировать ломбок, это функция весенней загрузки для чтения данных файла свойств, используйте формат ниже для правильного кода.
вам необходимо импортировать org.springframework.beans.factory.annotation.Value;
открытый класс SamplePropertyLoadingTest {@Autowired частный SampleProperty sampleProperty; @Value ("$ {prefix.stringProp1}") частный String stringProp1;
ваша идея хороша, но, к сожалению, значение @Size устанавливается во время компиляции, а файл свойств загружается во время выполнения, для этого некоторые опытные разработчики Java компании или мне не удалось найти способ заставить его работать, я не уверен, что я что-то пропускаю, или, может быть, я просто неправильно объяснил раньше. Наконец, мы жестко закодируем такие ограничения в виде исключения. В любом случае спасибо за вашу помощь.
Спасибо, но откуда мне импортировать @Value, Spring или Lombok? Я пробовал оба, и он принимает его только с помощью spring ... beans.factory.annotation.Value, и он не работает с @Size (..., max = gMax), он не компилируется: "Ошибка: (..) java: значение элемента должно быть постоянным выражением "