2013-01-14 80 views
2

我有以下類,它包含一個字符串字段和一個地圖字段。我想用Jackson將它序列化爲json。Java傑克遜寫對象兩次

public class Mapping 

    private String mAttribute; 

    @JsonIgnore 
    private Map<String, String> mMap; 

    @JsonAnyGetter 
    public Map<String, String> getMap() { 
     //some logic to populate map 
    } 

    @JsonAnySetter 
    public void put(// some params) { 
     //some more logic 
    } 

    @JsonProperty(value = "attribute") 
    public String getAttribute() { 
     return mAttribute; 
    } 

    public void setAttribute(String aAttribute) { 
     mAttribute= aAttribute; 
    } 
} 

我實例化一個Mapping對象,然後使用ObjectMapper將其寫入到一個文件中。

ObjectMapper om = new ObjectMapper(); 
om.writeValue(destFile, myMappingObject); 

出於某種原因,它是寫Mapping實例myMappingObject兩次。我假設我沒有在某處設置一些可見性選項,但我不知道在哪裏。

json看起來像這樣,只有它在文件中出現兩次。

{ 
    "attribute" : "someValue", 
    "map-key1" : "map-value1", 
    "map-key2" : "map-value2" 
} 

還有this,但顯然它是在先前版本的傑克遜修復的。我也嘗試將方法的名稱更改爲random(),並且它仍然被調用兩次(它應該的次數)。

回答

3

該問題與上述課程無關。我正在使用另一個有Mapping s的列表。之前:

public class MappingsList { 
    @JsonProperty 
    private List<Mapping> mappings; 

    public List<Mapping> getMappings() {return mappings;} 
} 

後:

public class MappingsList {   
    private List<Mapping> mappings; 

    @JsonProperty 
    public List<Mapping> getMappings() {return mappings;} 
} 

和它的工作。原因是ObjectMapper在MappingsList類中看到兩個(2)屬性,因此在兩者上都進行了序列化。首先它會爲mappings字段創建json,然後再爲getMappings()方法創建json。