gpt4 book ai didi

Java Jackson 两次写入对象

转载 作者:行者123 更新时间:2023-12-04 03:01:40 28 4
gpt4 key购买 nike

我有以下类,其中包含一个 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"
}

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

最佳答案

问题与上面的类无关。我正在使用另一个具有 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() 方法创建 json。

关于Java Jackson 两次写入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14323494/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com