我有一个很简单的杰克逊代码反序列化嵌套JSON对象:如何更改Jackson的默认混凝土地图类型?
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
每一个超类和实例,似乎没有任何工作最接近。
这是使用杰克逊2.4.2,但如果有办法做到这一点,需要更高的版本,我将能够升级。
用2.5.0试过,结果相同;根据要求发布错误。 – jgm 2015-02-07 08:34:41
谢谢。我希望事情变得容易解决,因为这是应该以您使用它的方式工作的。 – StaxMan 2015-02-09 22:06:23
FWIW,这个 - https://github.com/FasterXML/jackson-databind/issues/700 - 是问题所在,它将在Jackson 2.6中修复(难以回溯,因为问题对于' java.lang.Object',又名“untyped”映射) – StaxMan 2015-02-13 19:40:48