Рубрики
Без рубрики

YAML в список объектов в весенней загрузки

Узнайте, как сопоставить список YAML в Java-листе с помощью Spring Boot.

Автор оригинала: baeldung.

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 profiles;
    
    // getter and setter

}

ПриложениеПроп класс должен быть украшен @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> props;
    private List users;
    
    // getters and setters

    public static class User {

        private String username;
        private String password;
        private List roles;

        // getters and setters

    }
}

Теперь мы проверяем, правильно ли отображаются наши вложенные списки 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 .