我的 bean 看起来像这样:
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 时:
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("\n"+mapper.writeValueAsString(bean));
我得到这样的结果:
{"map":{"key2":"value2","key1":"value1"},"name":"suren"}
但是
{"key2":"value2","key1":"value1","name":"suren"}
预计根据 JacksonFeatureUnwrapping documentation .为什么我没有得到解包结果?
最佳答案
@JsonUnwrapped
不适用于 map ,仅适用于带有 getter 和 setter 的适当 POJO。对于 map ,您应该使用 @JsonAnyGetter
和 @JsonAnySetter
(在 jackson 版本 >= 1.6 中可用)。
在你的情况下,试试这个:
@JsonAnySetter
public void add(String key, String value) {
map.put(key, value);
}
@JsonAnyGetter
public Map<String,String> getMap() {
return map;
}
这样,你也可以直接给 map 添加属性,比如 add('abc','xyz')
会给 map 添加一个新的键 abc
具有值 xyz
。
关于java - 为什么我无法使用 Jackson Java 库解包和序列化 Java map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18043587/