gpt4 book ai didi

java - 如何使用 Jackson 序列化基于 java.util.Map 的类

转载 作者:搜寻专家 更新时间:2023-11-01 03:05:20 29 4
gpt4 key购买 nike

我有一个看起来像这样的类:

@JsonFormat(shape=JsonFormat.Shape.OBJECT)
public class MyMap implements Map<String, String>
{
protected Map<String, String> myMap = new HashMap<String, String>();

protected String myProperty = "my property";
public String getMyProperty()
{
return myProperty;
}
public void setMyProperty(String myProperty)
{
this.myProperty = myProperty;
}

//
// java.util.Map mathods implementations
// ...
}

以及使用此代码的主要方法:

            MyMap map = new MyMap();
map.put("str1", "str2");

ObjectMapper mapper = new ObjectMapper();
mapper.getDeserializationConfig().withAnnotationIntrospector(new JacksonAnnotationIntrospector());
mapper.getSerializationConfig().withAnnotationIntrospector(new JacksonAnnotationIntrospector());
System.out.println(mapper.writeValueAsString(map));

执行此代码时,我得到以下输出:{"str1":"str2"}

我的问题是为什么内部属性“myProperty”没有用 map 序列化?应该如何序列化内部属性?

最佳答案

很可能您最终会实现自己的序列化程序,它将处理您的自定义 Map 类型。请引用this question想要查询更多的信息。

如果您选择用组合替换继承,即让您的类包含一个映射字段而不是扩展一个映射,那么使用 the @JsonAnyGetter annotation 很容易解决这个问题.

这是一个例子:

public class JacksonMap {

public static class Bean {
private final String field;
private final Map<String, Object> map;

public Bean(String field, Map<String, Object> map) {
this.field = field;
this.map = map;
}

public String getField() {
return field;
}

@JsonAnyGetter
public Map<String, Object> getMap() {
return map;
}
}

public static void main(String[] args) throws JsonProcessingException {
Bean map = new Bean("value1", Collections.<String, Object>singletonMap("key1", "value2"));
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(map));
}
}

输出:

{"field":"value1","key1":"value2"}

关于java - 如何使用 Jackson 序列化基于 java.util.Map 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24633838/

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