SnakeYaml - загрузить карту со значениями типа List - PullRequest
0 голосов
/ 23 сентября 2019

Вопрос

Я хочу иметь возможность загрузить файл Yaml в структуру, похожую на:

Map<String, List<CustomType>


Пример

Вот несколько надуманный пример:

people.yml

people:
  group1:
    - name: Jason
      age: 20
    - name: Mary
      age: 31
  group2:
    - name: Ahmed
      age: 45
    - name: Larry
      age: 5

Типы данных:

People.java

class PersonInfo {
    private String name;
    private int age;
    // getters and setters
}

PeopleInfo.java

class PeopleInfo {
    private Map<String, List<PersonInfo>> people;
    // getters and setters
}

TestYaml.java

public class TestYaml {

    public static void main(String[] args) {
        Constructor ctr = new Constructor(PeopleInfo.class);
        TypeDescription td = new TypeDescription(PeopleInfo.class);
        td.putMapPropertyType("people", String.class, List.class);
        ctr.addTypeDescription(td);

        Yaml yaml = new Yaml(ctr);
        InputStream is = ClassLoader.getSystemResourceAsStream("people.yml");
        PeopleInfo peopleInfo = yaml.loadAs(is, PeopleInfo.class);
        System.out.println(peopleInfo);
    }

}

Результат

Вот что я получаю:

image]([![enter image description here] 1

Как видите, сгенерированная структура на самом деле:

Map<String, List<LinkedHashMap<String, String>>>

тогда как я хочу Map<String, List<PersonInfo>>

Как я могу заставить SnakeYaml знать тип PersonInfo и использовать его вместо LinkedHashMap?

...