我有以下类,其中包含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()
,并且仍然会被调用两次(它应该被调用的次数)。
答案 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()
方法创建。