2017-11-14 21 views
0

クラスにキーと値を解析します。ジャクソン/ YAML:私は私の入力YAMLファイル、私は以下のいる

public class DockerCompose { 
    public static class Service { 
     private String image; 
    } 

    private Map<String, Service> services; 
} 

私は希望:

services: 
    postgresql: 
    image: "postgres:10" 
    redis: 
    image: "redis:4" 

Map<String, Service>servicesフィールドを解析するのは簡単ですフィールドの名前がnameServiceList<Service>servicesフィールドを次のように解析します。

public class DockerCompose { 
    public static class Service { 
     private String name; 
     private String image; 
    } 

    private List<Service> services; 
} 

これは可能ですか?

答えて

0

最も簡単なオプションは、シリアル化のためのデシリアライズとゲッターのカスタムセッターを追加することです。

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<>(); 
} 
関連する問題