Java Jackson写了两次对象

时间:2013-01-14 17:29:24

标签: java json jackson

我有以下类,其中包含String字段和Map字段。我想用杰克逊把它序列化为json。

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(),并且仍然会被调用两次(它应该被调用的次数)。

1 个答案:

答案 0 :(得分:3)

问题与上述课程无关。我正在使用另一个列有Mapping列表的类。之前:

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()方法创建。