gpt4 book ai didi

java - 如何更改 Jackson 默认的具体 map 类型?

转载 作者:搜寻专家 更新时间:2023-10-31 20:27:44 27 4
gpt4 key购买 nike

我有一个非常简单的 Jackson 代码来反序列化嵌套的 JSON 对象:

public class MapTest
{
public static void main(String ... args) throws Exception
{
final String ser = "{\"nested\":{\"k1\":\"v1\",\"k2\":\"v2\",\"k3\":\"v3\"}}";
final Map<String, Object> deser = new ObjectMapper().readValue(ser, new TypeReference<TreeMap<String, Object>>(){});
System.out.println("Class of deser's nested object is " + deser.get("nested").getClass().getSimpleName());
}
}

当我运行它时,我得到以下输出:

Class of deser's nested object is LinkedHashMap

但是我希望将嵌套映射反序列化为 TreeMap 而不是输出中的 LinkedHashMap。我如何告诉 Jackson 在反序列化时默认使用 TreeMap

通过阅读文档,我发现最接近的是能够通过模块中的 addAbstractTypeMapping() 为抽象类型定义具体类,但我已经尝试了 LinkedHashMap 的每个父类(super class)和实例 尝试这样做,但似乎没有任何效果。

这是使用 Jackson 2.4.2,尽管如果有办法做到这一点需要更高版本,我将能够升级。

最佳答案

模块的 addAbstractTypeMapping() 确实是实现一般映射的方法。但问题可能是由于反序列化的递归性质;因为内部值被认为是 java.lang.Object 类型。

但是,我认为在 2.5 中确实对这部分进行了修复,所以我会特别检查一下 2.5.0 是否可以工作,一旦你添加了从 MapTreeMap 的抽象映射。如果这不起作用,请在 https://github.com/FasterXML/jackson-databind/issues 提交错误因为它应该有效。

关于java - 如何更改 Jackson 默认的具体 map 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375069/

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