Может пружинно инициализировать дочерний компонент из yml, когда родительский объект с аргументом-конструктором, дочерний элемент имеет больше членов

Скажем, у меня есть родительский класс с одним членом:

public class Person {

    private String name;


    public void setName(String aName) {
        this.name = aName;
    }

    public String getName() {
         return this.name;
    }
}

У меня есть класс конфигурации, например:

@Configuration
@ConfigurationProperties
public class ApplicationConfig {

  private final List<Person> persons = 
      new ArrayList<Person>();



  public List<Person> getPersons() {
    return persons;
}

И я хочу инициализировать набор людей из моего файла application.yml:

persons:
 - Bob
 - Eva
 - Robin

Я обнаружил, что это работает при условии, что Person определяется как:

public class Person {

    private String name;

    public Person(String aName) {
      this.name = aName;
    }

    public String getName() {
         return this.name;
    }
}

Но он ломается, как только я представляю Employee extends Person, где у сотрудника есть employeeNumber. В идеале я хотел бы сделать это, но это недопустимый yml:

persons:
 - Bob
 - Eva
 - Robin
employees:
 - Tim
   employeeNum: 123

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

royalghost 09.03.2018 16:12

@ royalGhost Я не понимаю, вы имеете в виду, что Spring заполняет список строк, а затем использует его для инициализации списка лиц?

Ivana 09.03.2018 16:20

Да, вы можете хранить список людей во внешнем файле, таком как application.yml.

royalghost 09.03.2018 16:24

@royalGhost, я храню людей во внешнем файле. Мой вопрос заключается в том, чтобы явно указать имя члена в yml или оставить его для Spring, чтобы выяснить это.

Ivana 09.03.2018 16:32

Боюсь, вам придется использовать подробную версию

Paizo 09.03.2018 16:36

Связанный вопрос: stackoverflow.com/questions/5150181/…

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

Ответы 1

Пока я не нашел способа сделать это, кроме как определить как родительский, так и дочерний класс с помощью геттеров и сеттеров (так что никаких аргументов конструктора!) И определить .yml как:

persons:
  - name: Bob
  - name: Eva
  - name: Robin
employees:
  - name Tim
    employeeNum: 123

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