为什么我无法使用 Jackson Java 库解包和序列化 Java 映射? [英] Why I'm not able to unwrap and serialize a Java map using the Jackson Java library?
问题描述
我的 bean 看起来像这样:
My bean looks like this:
class MyBean {
private @JsonUnwrapped HashMap<String, String> map = new HashMap<String, String>();
private String name;
public HashMap<String, String> getMap() {
return map;
}
public void setMap(HashMap<String, String> map) {
this.map = map;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
当我使用以下代码序列化 bean 时:
While I'm serializing the bean using the following code:
MyBean bean = new MyBean();
HashMap<String, String> map = new HashMap<String, String>();;
map.put("key1", "value1");
map.put("key2", "value2");
bean.setMap(map);
bean.setName("suren");
ObjectMapper mapper = new ObjectMapper();
System.out.println("
"+mapper.writeValueAsString(bean));
我得到这样的结果:
{"map":{"key2":"value2","key1":"value1"},"name":"suren"}
但是
{"key2":"value2","key1":"value1","name":"suren"}
预期符合 JacksonFeatureUnwrapping 文档.为什么我没有得到解包的结果?
is expected per the JacksonFeatureUnwrapping documentation. Why am I not getting the unwrapped result?
推荐答案
@JsonUnwrapped
不适用于地图,仅适用于具有 getter 和 setter 的适当 POJO.对于地图,您应该使用 @JsonAnyGetter
和 @JsonAnySetter
(适用于 jackson 版本 >= 1.6).
@JsonUnwrapped
doesn't work for maps, only for proper POJOs with getters and setters. For maps, You should use @JsonAnyGetter
and @JsonAnySetter
(available in jackson version >= 1.6).
在你的情况下,试试这个:
In your case, try this:
@JsonAnySetter
public void add(String key, String value) {
map.put(key, value);
}
@JsonAnyGetter
public Map<String,String> getMap() {
return map;
}
这样,你也可以直接给地图添加属性,比如add('abc','xyz')
会在地图上添加一个新的key abc
值为 xyz
.
That way, you can also directly add properties to the map, like add('abc','xyz')
will add a new key abc
to the map with value xyz
.
这篇关于为什么我无法使用 Jackson Java 库解包和序列化 Java 映射?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!