我有一個很簡單的傑克遜代碼反序列化嵌套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