如何用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
相关产品推荐
相关产品推荐

