gpt4 book ai didi

java - 为什么我无法使用 Jackson Java 库解包和序列化 Java map ?

转载 作者:IT老高 更新时间:2023-10-28 12:47:12 25 4
gpt4 key购买 nike

我的 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/

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