2012-10-09 50 views
10

我試圖解析使用Spring構建傑克遜支持我的控制器從UI發送JSON數據,這是我的代碼JsonMappingException無單String構造/工廠方法傑克遜

final Map<String, CartDataHelper> entriesToUpdateMap = new ObjectMapper().readValue(entriesToUpdate, new TypeReference<Map<String, CartDataHelper>>() 

我的JSON字符串

{"0":"{\"categoryCode\":\"shoes\",\"productCode\":\"300050253\",\"initialQty\":\"3\",\"leftoverQty\":\"0\",\"newQty\":\"3\"}", 
"1":"{\"categoryCode\":\"shoes\",\"productCode\":\"300050254\",\"initialQty\":\"3\",\"leftoverQty\":\"0\",\"newQty\":\"3\"}"} 

我使用一些在線服務檢查JSON格式,它似乎有效,而試着GTO解析JSON數據我得到以下異常

org.codehaus.jackson.map.JsonMappingException: Can not instantiate value of type [simple type, class controllers.util.CartDataHelper] from JSON String; no single-String constructor/factory method 

CartDataHelper類包含了productCodecategoryCode等具有無參數的構造函數

+2

這個JSON數據看起來像它的雙重轉義。所以雖然它可能是有效的,但我認爲它不代表你的想法。它表示具有兩個屬性(「0」和「1」)的對象,每個屬性的值都看起來像表示爲字符串的JSON編碼對象。 – Ramon

+0

@Ramon:有沒有辦法改變結構來滿足這個要求? –

+0

這取決於生成它的代碼,我猜。 – Ramon

回答

6

正如評論所說,你的JSON包含Map<String,String>和NOT Map<String,CartDataHelper>簡單的屬性:值是JSON字符串,而不是JSON對象。

理想情況下,您不會嘗試將對象寫爲JSON字符串;如果是這樣,事情就會奏效。

0

似乎在客戶端,json是作爲字符串而不是作爲對象發送的。這樣在服務器端,你正在接收一個字符串,而不是你假裝的CartDataHelper。

嘗試發送JSON.parse(stringCartDataHelper)。它同樣適用於我的問題。