1. Обзор
В этом коротком учебнике, мы будем иметь более пристальное как сопоставить список YAML в Список весной Boot .
Сначала мы начнем с некоторых справочных данных о том, как определить списки в YAML. Затем мы будем копать глубже, чтобы увидеть, как связать списки YAML Список s объектов.
2. Быстрый Резюме о списках в YAML
Короче говоря, ЯМЛ является читаемым человеком стандартом сериализации данных, который обеспечивает краткий и ясный способ записи файлов конфигурации. Хорошая вещь о YAML является тот факт, что он поддерживает несколько типов данных, таких как Список s, Карта s и масштабируемые типы .
Элементы в списке YAML определяются с помощью символа “-” и все они имеют один и тот же уровень отступов:
yamlconfig: list: - item1 - item2 - item3 - item4
Для сравнения эквивалент свойств использует индексы:
yamlconfig.list[0]=item1 yamlconfig.list[1]=item2 yamlconfig.list[2]=item3 yamlconfig.list[3]=item4
Для получения дополнительных примеров, не стесняйтесь взглянуть на нашу статью о том, как определить списки и карты с помощью файлов YAML и свойств .
По сути, иерархический характер YAML значительно повышает читаемость по сравнению с свойствами файлов . Еще одной интересной особенностью YAML является возможность определения различные свойства для различных профилей Весна . Начиная с Boot версии 2.4.0, это также возможно для файлов свойств.
Стоит отметить, что Spring Boot обеспечивает вне коробки поддержку конфигурации YAML. По замыслу, Spring Boot загружает свойства конфигурации из application.yml при запуске без дополнительной работы.
3. Привязка списка YAML к простому списку объектов
Весенняя загрузка обеспечивает @ConfigurationProperties аннотация к упростить логику отображения данных внешней конфигурации в объектную модель .
В этом разделе мы будем использовать @ConfigurationProperties для привязки списка YAML к Список .
Начнем с определения простого списка в application.yml :
application: profiles: - dev - test - prod - 1 - 2
Затем мы создадим простую ПриложениеПроп POJO придерживаться логики привязки нашего списка YAML к Список Объектов:
@Component @ConfigurationProperties(prefix = "application") public class ApplicationProps { private List
ПриложениеПроп класс должен быть украшен @ConfigurationProperties выразить намерение отображения всех свойств YAML с указанной приставкой к объекту ПриложениеПроп .
Связать профили список нам просто нужно определить поле типа Список и @ConfigurationProperties аннотация будет заботиться об остальном.
Обратите внимание, что мы регистрируем ПриложениеПроп класс, как нормальный весенний боб, используя @Component . В результате, мы можем ввести его в другие классы так же, как и любой другой весенний боб.
Наконец, мы вводим ПриложениеПроп фасоли в тестовый класс и проверить, если наши профили Список YAML правильно вводится в качестве Список :
@ExtendWith(SpringExtension.class) @ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) @EnableConfigurationProperties(value = ApplicationProps.class) class YamlSimpleListUnitTest { @Autowired private ApplicationProps applicationProps; @Test public void whenYamlList_thenLoadSimpleList() { assertThat(applicationProps.getProfiles().get(0)).isEqualTo("dev"); assertThat(applicationProps.getProfiles().get(4).getClass()).isEqualTo(Integer.class); assertThat(applicationProps.getProfiles().size()).isEqualTo(5); } }
4. Привязка списков ЯМЛ к сложным спискам
Теперь давайте погрузимся глубже и посмотрим, как внедрить вложенные списки YAML в сложные структурированные Список s .
Во-первых, давайте добавим некоторые вложенные списки application.yml :
application: // ... props: - name: YamlList url: http://yamllist.dev description: Mapping list in Yaml to list of objects in Spring Boot - ip: 10.10.10.10 port: 8091 - email: [email protected] contact: http://yamllist.dev/contact users: - username: admin password: [email protected]@ roles: - READ - WRITE - VIEW - DELETE - username: guest password: [email protected] roles: - VIEW
В этом примере мы собираемся связать реквизит собственность на Список<Мап<Страховая, объект>> . Точно так же мы наметить пользователи в Список Пользователь Объектов.
Так как каждый элемент реквизит запись содержит различные клавиши, то мы можем ввести его в качестве Список Карта s . Не забудьте проверить нашу статью о том, как введать карту из файла YAML в весенней загрузке .
Однако , в случае пользователи , все элементы имеют одинаковые ключи, таким образом, чтобы упростить его отображение, нам может понадобиться создать специальную Пользователь класс для инкапсулировать клавиши в качестве полей:
public class ApplicationProps { // ... private List
Теперь мы проверяем, правильно ли отображаются наши вложенные списки YAML:
@ExtendWith(SpringExtension.class) @ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) @EnableConfigurationProperties(value = ApplicationProps.class) class YamlComplexListsUnitTest { @Autowired private ApplicationProps applicationProps; @Test public void whenYamlNestedLists_thenLoadComplexLists() { assertThat(applicationProps.getUsers().get(0).getPassword()).isEqualTo("[email protected]@"); assertThat(applicationProps.getProps().get(0).get("name")).isEqualTo("YamlList"); assertThat(applicationProps.getProps().get(1).get("port").getClass()).isEqualTo(Integer.class); } }
5. Заключение
В этом учебнике мы узнали, как сопоставить списки YAML в Java Список секунда. Мы также проверили, как связать сложные списки с пользовательскими POJOs.
Как всегда, полный исходный код для этой статьи доступен более на GitHub .