【问题标题】:How to map a list in yaml to java object using jackson so that parent node values can be returned?如何使用jackson将yaml中的列表映射到java对象,以便可以返回父节点值?
【发布时间】:2021-10-08 06:17:47
【问题描述】:

我在我的 java 项目中使用 jackson

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

我想将此 yaml 映射到 java 类

  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;
        }


现在我的问题是如何为 Setting 类映射该属性 name 以便它返回 name 作为值

【问题讨论】:

    标签: java yaml jackson-dataformat-yaml


    【解决方案1】:

    字段名称。

    一个完整的例子

    @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)])])
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 2016-07-13
      • 2018-11-23
      • 1970-01-01
      相关资源
      最近更新 更多