如何使用 jackson 将 yaml 中的列表映射到 java 对象,以便返回父节点值?

How to map a list in yaml to java object using jackson so that parent node values can be returned?

我在我的 java 项目中使用 jackson

        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
            <version>2.10.3</version>
        </dependency>

我想将此 yaml 映射到 java classes

  Settings:
    - Setting: number1
      Environments:
        - Name: name
          Value: 3

我现在能想到的是这个

public class MyYaml {
    private Set<Setting> settings;

    @JsonProperty("Settings")
    public String getSettings() {
        return settings;
    }

    public class Setting {
        private String name;
        private Environments environments;

        @JsonProperty("??????????????????????")
        public String getName() {
            return name;
        }


现在我的问题是如何将属性 name 映射到设置 class 以便它 returns name 作为值

字段名称。

一个完整的例子

@Getter @Setter @ToString // lombok for simplicity, can be written at hand
static class MyYaml {
    private Set<Setting> settings;
}

@Getter @Setter @ToString
static class Setting {
    @JsonProperty("setting") // << REQUIRED
    private String name;
    private Set<Environment> environments;
}

@Getter @Setter @ToString
static class Environment {
    private String name;
    private int value;
}

使用示例

System.out.println(new ObjectMapper(new YAMLFactory()).readValue("settings:\n" +
        "  - setting: setting1\n" +
        "    environments:\n" +
        "      - name: env1\n" +
        "        value: 31\n" +
        "      - name: env2\n" +
        "        value: 12\n" +
        "  - setting: setting2\n" +
        "    environments:\n" +
        "      - name: env2.1\n" +
        "        value: 2.31\n" +
        "      - name: env2.2\n" +
        "        value: 2.12\n", MyYaml.class));

有输出

MyYaml(settings=[
  Setting(name=setting2,
    environments=[Environment(name=env2.1, value=2),
                  Environment(name=env2.2, value=2)]),
  Setting(name=setting1,
    environments=[Environment(name=env1, value=31),
                  Environment(name=env2, value=12)])])

(注意:小写只是为了避免写下其余字段,您可以将它们添加为大写)