Вопрос
Я хочу иметь возможность загрузить файл 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);
}
}
Результат
Вот что я получаю:
] 1
Как видите, сгенерированная структура на самом деле:
Map<String, List<LinkedHashMap<String, String>>>
тогда как я хочу Map<String, List<PersonInfo>>
Как я могу заставить SnakeYaml знать тип PersonInfo и использовать его вместо LinkedHashMap
?