Загрузите свойство типа списка из приложения yml в Java POJO

Я хочу загрузить вложенное свойство List в JAVA POJO

Я загружаю свойства из yml, используя аннотацию ConfigurationProperties для класса A. Мой список имеет тип B. Этот объект B имеет собственный атрибут LIST. Однако свойства yml не загружаются должным образом.

@ConfigurationProperties(prefix = "prop")
public class A{
List<B> b = new ArrayList<>(); 

//getters and setters ......
}

public class B{
String user; //This property gets loaded.
List<String> list = new ArrayList<>(); //However this list is still empty

//getters and setters ......
}

Мои свойства в application.yml выглядят так, как показано ниже.

prop:
  -
  user: alpha
  list: a,b,c
  -
  user: beta
  list: x,y,z
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
804
2

Ответы 2

В соответствии с руководство вы определяете элементы своего списка как:

list: 
      - a
      - b
      - c

Ну, это не синтаксис списка YAML:

list: a,b,c

Это всего лишь одна строка a,b,c.

Если вы хотите использовать список с разделителями-запятыми, вы можете проанализировать его после загрузки. Spring делает что-то подобное с некоторыми своими свойствами, как в этом примере со свойствами RabbitMQ. addresses разделены запятыми, а функция parseAddresses() разбивает строку после загрузки как часть метода установки этого члена.

https://github.com/spring-projects/spring-boot/blob/v2.1.3.RELEASE/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ amqp/RabbitProperties.java

В противном случае используйте синтаксис списка YAML.

prop:
  - user: alpha
    list: 
      - a
      - b
      - c
  - user: beta
    list:
      - x
      - y
      - z

Даже после того, как это было дано таким образом, это не работает. Он не может подобрать вложенный список и инициализировать его.

Dhiraj Gandhi 22.02.2019 11:41

Синтаксис, заданный @jbx, верен для вложенных контейнеров. У вас должно быть что-то не так в именовании, вложении или предоставлении средств доступа для членов.

Andy Brown 22.02.2019 12:17

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