首页 > 解决方案 > 使用 Jackson 将 YAML 的子树映射到 POJO

问题描述

我正在使用杰克逊的对象映射器将 YAML 映射到我的 Pojo。我的 YAML 是一个配置文件,我想使用 Jackson 仅读取特定类型的配置。

以下是我的 YAML 的样子:

A:
  a:
    1: i
    2: ii
    3: iii

  b:
   foo: bar

我想读取 POJO 中的所有A.a数据1,2,3

我的 POJO 看起来像

public class MyPojo{
 String one;
 String two;
 String three;
}

你明白了。我想在 Pojo 中映射特定节点的所有子节点。

我知道我可以readTree("myYaml").get("A").get("a")得到所有孩子的名单。但是杰克逊有没有办法像readValue(file, class)??那样将该子树转换为 Pojo?

标签: javajackson

解决方案


没有人帮助我,所以我帮助了我自己:)。

有一种方法treeToValue(TreeNode, Class),所以嵌套treeToValuereadTree有助于做想要的事情。

所以为了读取子树A.a,我们需要做

File myYamlFile = new File(someclass.getClass().getClassLoader().getResource("myYAML").getFile())
MyPojo myPojo = jacksonObjectMapper.treeToValue(jacksonObjectMapper.readTree(myYamlFile).get("A").get("a"), MyPojo.class)

推荐阅读