POJO + ограничения переменных при объявлении из файлов свойств (с Lombok и Spring)

В проекте 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, или, по крайней мере, , не считается антишаблон, например класс Константы)?

Большое спасибо и с наилучшими пожеланиями

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
587
1

Ответы 1

добавьте свойство 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;

Спасибо, но откуда мне импортировать @Value, Spring или Lombok? Я пробовал оба, и он принимает его только с помощью spring ... beans.factory.annotation.Value, и он не работает с @Size (..., max = gMax), он не компилируется: "Ошибка: (..) java: значение элемента должно быть постоянным выражением "

xCovelus 16.10.2018 18:06

Вам не нужно импортировать ломбок, это функция весенней загрузки для чтения данных файла свойств, используйте формат ниже для правильного кода.

GauravRai1512 16.10.2018 18:27

вам необходимо импортировать org.springframework.beans.factory.annotation.Value;

GauravRai1512 16.10.2018 18:27

открытый класс SamplePropertyLoadingTest {@Autowired частный SampleProperty sampleProperty; @Value ("$ {prefix.stringProp1}") частный String stringProp1;

GauravRai1512 16.10.2018 18:28

ваша идея хороша, но, к сожалению, значение @Size устанавливается во время компиляции, а файл свойств загружается во время выполнения, для этого некоторые опытные разработчики Java компании или мне не удалось найти способ заставить его работать, я не уверен, что я что-то пропускаю, или, может быть, я просто неправильно объяснил раньше. Наконец, мы жестко закодируем такие ограничения в виде исключения. В любом случае спасибо за вашу помощь.

xCovelus 17.10.2018 16:17

Другие вопросы по теме