2014-03-19 22 views
1

我有一個動態字段,其中密鑰是未知的,值可以是字符串或對象。 此外,該字段本身可以是地圖或只是一個值。 我該如何指導傑克遜根據它的值類型來序列化/反序列化這個字段? 我還想保存我輸入的對象以在我的代碼中使用,而不僅僅使用Map<String, Object>的地圖。使用jackson的多個Any-Setter?

public class MyPackage { 

    @JsonProperty("versions") 
    public Versions versions = new Versions(); 

    @JsonAnySetter 
    public void add(String key, MyVersionObject value) { 
     versions.put(key, value); 
    } 

    @JsonAnyGetter 
    public Map<String, MyVersionObject> getMap() { 
     return versions; 
    } 
} 

不同JSONs,這個領域應該接受:

{ 
    "versions": { 
     "1.0": { ... MyVersionObject fields}, 
     "2.0": { ... MyVersionObject fields}, 
     "3.0": { ... MyVersionObject fields}, 
    } 
} 

或者

{ 
    "versions": { 
     "3.0": "latest" 
    } 
} 

回答

1

聽起來輸入是如此的不規則,你真的不能動態地進行定義。所以請留下類型的值爲Object;這會給你StringMap。從此,改變自己;手動或使用ObjectMapper.convertValue()方法。