2012-10-09 25 views
10

Estoy tratando de analizar los datos JSON que se envían desde la interfaz de usuario en mi controlador utilizando Spring crear apoyo Jackson y este es mi códigoJsonMappingException hay una única cadena-método constructor/fábrica de Jackson

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

mi cadena JSON es

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

he comprobado el formato JSON utilizando algunos servicios en línea y parece válida, mientras GTO tratando de análisis de datos JSON que estoy recibiendo siguiente excepción

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 

mi clase CartDataHelper contiene propiedades simples para completamente productCode, etc categoryCode con un constructor sin argumentos

+2

Parece que los datos JSON han sido escapados por error. Entonces, si bien puede ser válido, no creo que represente lo que crees que hace. Representa un objeto con dos propiedades ("0" y "1") cada una con un valor que se parece a un objeto codificado JSON representado como una cadena. – Ramon

+0

@Ramon: ¿hay alguna manera de cambiar la estructura para cumplir con esto? –

+0

Depende del código que lo produjo, supongo. – Ramon

Respuesta

6

Como los comentarios mencionan, su JSON contiene Map<String,String> y NO Map<String,CartDataHelper>: JSON valores son cadenas, no objetos JSON.

Lo ideal sería que no intente escribir objetos como cadenas JSON; y si es así, las cosas funcionarían.

0

Parece que en el lado del cliente el json se envía como una cadena en su lugar como un objeto. De esa manera, en el lado del servidor está recibiendo una cadena y no un CartDataHelper como pretende.

Intente enviar JSON.parse(stringCartDataHelper). Me funcionó con el mismo problema.

Cuestiones relacionadas