如何使用jackson将YAML文件中的列表读入Java?

时间:2018-06-14 02:31:34

标签: spring-boot java-8 jackson yaml

所以,我有一个像这样的YAML文件:

- code: QWERTY1
  name: qwerty-name
  desc: a qwerty desc
- code: QWERTY2
  name: qwerty-name-2
  desc: a qwerty desc 2

我正在尝试使用MyObject将其作为jackson列表阅读。

我的Java代码如下所示:

public <T, K> List<K> readSerializedList(File f, Class<T> formatType, Class<K> classType) throws IOException{
    ObjectMapper MAPPER = new ObjectMapper(new YAMLFactory());
    try {
        final T result = MAPPER.readValue(f, formatType);
        List<K> myList = MAPPER.convertValue(result, new TypeReference<List<K>>() { });
        return myList;
    } catch (JsonParseException | JsonMappingException | InvalidKeyException e) {
        throw new IOException(e);
    } 
}

我从另一个函数中调用它:

readSerializedList(new File("path/to/file/a.yaml"), List.class, MyObject.class)

我没有获得MyObject列表,而是获得LinkedHashMap

如果我明确地将第4行更改为:

List<MyObject> myList = MAPPER.convertValue(result, new TypeReference<List<MyObject>>() { });

然后我获得了MyObject的列表。

我需要那种我想要实现的概括,因为设计是这样的,readSerializedList()应该能够从YAML读取我们告诉它的任何类型的列表。

有没有办法实现这个目标?我正在使用带有Java 8的Springboot。

0 个答案:

没有答案