如何使用Jackson将YAML列表映射为Java对象并获取父节点值
问题修正方案
你现有代码存在多处结构匹配错误,按以下步骤调整即可完成正确映射:
- 首先调整
MyYaml类的getter返回值类型,与成员变量settings的Set<Setting>类型保持一致 Setting类的name属性对应YAML中的键为Setting,直接将@JsonProperty值填为"Setting"即可- 额外需要修正的匹配问题:
- YAML中
Environments是数组结构,你现有代码定义为单个Environments类型,需要修改为List<Environment> - 所有内部类需要添加
static修饰,否则Jackson无法完成非静态内部类的实例化 - 为
environments属性添加@JsonProperty("Environments")注解完成字段映射
- YAML中
修正后完整代码示例
import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; import java.util.Set; public class MyYaml { private Set<Setting> settings; @JsonProperty("Settings") public Set<Setting> getSettings() { return settings; } public void setSettings(Set<Setting> settings) { this.settings = settings; } // 内部类添加static修饰 public static class Setting { private String name; private List<Environment> environments; @JsonProperty("Setting") public String getName() { return name; } public void setName(String name) { this.name = name; } @JsonProperty("Environments") public List<Environment> getEnvironments() { return environments; } public void setEnvironments(List<Environment> environments) { this.environments = environments; } } public static class Environment { private String name; private Integer value; @JsonProperty("Name") public String getName() { return name; } public void setName(String name) { this.name = name; } @JsonProperty("Value") public Integer getValue() { return value; } public void setValue(Integer value) { this.value = value; } } }
内容的提问来源于stack exchange,提问作者TrongBang
相关产品推荐
相关产品推荐

