首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jackson/YAML:将key-value解析为class

Jackson/YAML:将key-value解析为class
EN

Stack Overflow用户
提问于 2017-11-15 04:10:46
回答 1查看 820关注 0票数 1

在我的输入yaml文件中,我有以下内容:

代码语言:javascript
复制
services:
  postgresql:
    image: "postgres:10"
  redis:
    image: "redis:4"

services字段解析为Map<String, Service>很容易

代码语言:javascript
复制
public class DockerCompose {
    public static class Service {
        private String image;
    }

    private Map<String, Service> services;
}

我想用Service中字段name中的名称解析List<Service>中的services字段,如下所示:

代码语言:javascript
复制
public class DockerCompose {
    public static class Service {
        private String name;
        private String image;
    }

    private List<Service> services;
}

这个是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2017-11-15 04:50:59

最简单的选择是为反序列化添加自定义setter,为序列化添加getter。

代码语言:javascript
复制
public static class DockerCompose {

    public static class Service {
        @JsonIgnore // for serialization
        private String name;
        private String image;
    }

    @JsonProperty("services") // for derserialization
    public void setServicesMap(Map<String, Service> servicesMap){
        for (Map.Entry<String, Service> entry  :servicesMap.entrySet()) {
            entry.getValue().name = entry.getKey();
            services.add(entry.getValue());
        }
    }

    @JsonProperty("services") // for serialization
    public Map<String, Service> getServicesMap() {
        Map<String, Service> map = new HashMap<>();
        for(Service s: services)
            map.put(s.getName(), s);
        return map;
    }

    @JsonIgnore // for serialization
    private List<Service> services = new ArrayList<>();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47294376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档