2012-10-09 8 views
10

Ich versuche, JSON-Daten zu analysieren, von UI gesendet in meinem Controller wurden mit Spring Jackson Unterstützung bauen und dies ist mein CodeJsonMappingException keine Single-String-Konstruktor/Factory-Methode Jackson

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

mein JSON-String ist

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

geprüft i das JSON-Format einig Online-Dienste, und es scheint gültig, während tryin gto Parse-JSON-Daten i folgende Ausnahme ist immer

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 

meine CartDataHelper Klasse enthält einfache Eigenschaften für für productCode, categoryCode etc mit einem kein Argument Konstruktor

+2

Diese JSON-Daten sehen aus, als wären sie doppelt maskiert. Es mag zwar gelten, aber ich denke nicht, dass es das darstellt, was Sie denken. Sie stellt ein Objekt mit zwei Eigenschaften ("0" und "1") mit einem Wert dar, der wie ein JSON-codiertes Objekt aussieht, das als String dargestellt wird. – Ramon

+0

@Ramon: Gibt es eine Möglichkeit, die Struktur zu ändern, um dies zu erfüllen? –

+0

Es hängt von dem Code ab, der es produziert, denke ich. – Ramon

Antwort

6

Wie Kommentaren erwähnt, Ihre JSON enthält Map<String,String> und NICHT Map<String,CartDataHelper>: Werte sind JSON Strings, nicht JSON-Objekte.

Im Idealfall würden Sie nicht versuchen, Objekte als JSON Strings auszugeben; und wenn, dann würden die Dinge funktionieren.

0

Es scheint, dass auf der Clientseite der JSON als String als Objekt gesendet wird. Auf diese Weise erhalten Sie auf der Serverseite einen String und keinen CartDataHelper, wie Sie vorgeben.

Versuchen Sie, JSON.parse(stringCartDataHelper) zu senden. Es hat mit dem gleichen Problem für mich funktioniert.

Verwandte Themen