【问题标题】:Java Jackson writing object twiceJava Jackson 两次写入对象
【发布时间】:2013-01-14 17:29:23
【问题描述】:

我有以下类,其中包含一个字符串字段和一个地图字段。我想使用 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"
}

this,但显然它已在先前版本的 Jackson 中修复。我还尝试将方法的名称更改为random(),但它仍然被调用了两次(它应该调用的次数)。

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    这个问题与上面的类无关。我正在使用另一个具有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。

    【讨论】:

      猜你喜欢
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 2019-05-30
      • 1970-01-01
      相关资源
      最近更新 更多