我的豆子看起来像这样:
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文档中的说明。为什么我没有得到解包结果?
@JsonUnwrapped不适用于地图,仅适用于具有getter和setter的正确POJO。对于地图,应使用@JsonAnyGetter和@JsonAnySetter(在杰克逊版本> = 1.6中可用)。
@JsonUnwrapped
@JsonAnyGetter
@JsonAnySetter
在您的情况下,请尝试以下操作:
@JsonAnySetter public void add(String key, String value) { map.put(key, value); } @JsonAnyGetter public Map<String,String> getMap() { return map; }
这样,您还可以直接向地图添加属性,例如add('abc','xyz')将abc使用value向地图添加新键xyz。
add('abc','xyz')
abc
xyz