You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Jackson将YAML中的Env列表反序列化为Java List<Env>?

解决Jackson将YAML中的env列表反序列化为List的问题

你的YAML里service.env本身就是数组结构,直接对应Java的List<Env>,不需要转成Map。下面是正确的实现步骤:

1. 确保Env类支持Jackson序列化/反序列化

Jackson需要能访问类的属性,你可以给name和value手动添加getter、setter方法,也可以用Lombok的@Data注解自动生成:

// 方式1:手动添加getter/setter
public class Env {
    private String name;
    private String value;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}

// 方式2:用Lombok简化(需引入Lombok依赖)
import lombok.Data;

@Data
public class Env {
    private String name;
    private String value;
}

2. 直接将JsonNode反序列化为List

修改原有代码,把TypeReference改为List<Env>类型,直接读取env节点即可:

ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
JsonNode envNode = jsonNode.get("service").get("env");
TypeReference<List<Env>> typeRef = new TypeReference<>() {};
List<Env> envList = objectMapper.readValue(envNode.toString(), typeRef);

3. 更规范的实现:定义整体配置类

如果YAML还有其他节点,建议定义对应配置类,直接反序列化整个文件,代码更清晰易维护:

// Service子配置类
public class ServiceConfig {
    private List<Env> env;

    public List<Env> getEnv() {
        return env;
    }

    public void setEnv(List<Env> env) {
        this.env = env;
    }
}

// 根配置类
public class RootConfig {
    private ServiceConfig service;

    public ServiceConfig getService() {
        return service;
    }

    public void setService(ServiceConfig service) {
        this.service = service;
    }
}

然后直接反序列化整个YAML文件:

ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
// 替换为你的YAML文件路径
RootConfig rootConfig = objectMapper.readValue(new File("your-config.yaml"), RootConfig.class);
List<Env> envList = rootConfig.getService().getEnv();

内容的提问来源于stack exchange,提问作者werdf02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:15:16