我有一个非常简单的 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 是否可以工作,一旦你添加了从 Map
到 TreeMap 的抽象映射
。
如果这不起作用,请在 https://github.com/FasterXML/jackson-databind/issues 提交错误因为它应该有效。
关于java - 如何更改 Jackson 默认的具体 map 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28375069/