3

我有以下类,其中包含一个 String 字段和一个 Map 字段。我想使用 Jackson 将其序列化为 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"
}

这个,但显然它在杰克逊的早期版本中已修复。我还尝试将方法的名称更改为random(),它仍然被调用两次(它应该调用的次数)。

4

1 回答 1

4

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

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。

于 2013-01-14T18:51:29.757 回答