it-roy-ru.com

JsonMappingException нет однострокового конструктора/фабричного метода Джексона

Я пытаюсь проанализировать данные JSON, отправленные из пользовательского интерфейса в моем контроллере, используя поддержку сборки Джексона Spring, и это мой код

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 с помощью некоторых онлайн-сервисов, и он кажется действительным, но при попытке проанализировать данные 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 содержит простые свойства для for productCode, categoryCode и т. д. с конструктором без аргументов

10
Finding Nemo

Как уже упоминалось, ваш JSON содержит Map<String,String> и NOT Map<String,CartDataHelper>: значения - это строки JSON, а не объекты JSON.

В идеале вы не пытались бы записывать объекты как строки JSON; и если так, все будет работать.

7
StaxMan

Кажется, что на стороне клиента json отправляется как строка, а не как объект. Таким образом, на стороне сервера вы получаете строку, а не CartDataHelper, как вы притворяетесь. 

Попробуйте отправить JSON.parse(stringCartDataHelper). Это сработало для меня с той же проблемой.

0
Seba Cervantes