2012-10-09 17 views
10

Sto cercando di analizzare i dati JSON inviati da interfaccia utente in mio controller utilizzando Primavera costruire sostegno Jackson e questo è il mio codiceJsonMappingException nessun singolo-String metodo di costruzione/factory Jackson

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

mia stringa JSON è

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

ho controllato il formato JSON utilizzando alcuni servizi on-line e sembra valida, mentre gto provando analizzare i dati JSON io sono sempre seguente eccezione

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 

mia classe CartDataHelper contiene proprietà semplici per per productCode, categoryCode ecc con un no argomento del costruttore

+2

I dati JSON sembrano essere stati doppiamente sfuggiti. Quindi, mentre può essere valido, non penso che rappresenti ciò che pensi che faccia. Rappresenta un oggetto con due proprietà ("0" e "1") ciascuna con un valore simile a un oggetto codificato JSON rappresentato come una stringa. – Ramon

+0

@Ramon: c'è un modo per cambiare la struttura per soddisfare questo? –

+0

Dipende dal codice che lo ha prodotto, immagino. – Ramon

risposta

6

Come commenti menzionati, il vostro JSON contiene Map<String,String> e NON Map<String,CartDataHelper>: i valori sono JSON Strings, non JSON oggetti.

Idealmente non proverai a scrivere oggetti come stringhe JSON; e se così fosse, le cose funzionerebbero.

0

Sembra che sul lato client il json sia inviato come stringa invece che come oggetto. In questo modo sul lato server stai ricevendo una stringa e non un CartDataHelper come fai finta.

Prova a inviare JSON.parse(stringCartDataHelper). Ha funzionato per me con lo stesso problema.

Problemi correlati