JsonMappingException no single-String конструктор /factory метод Jackson
Я пытаюсь разобрать данные JSON, отправляемые из пользовательского интерфейса в моем контроллере, используя поддержку поддержки Spring Jackson, и это мой код
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 с помощью некоторых онлайн-сервисов, и он кажется действительным, а tryin 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
my CartDataHelper
класс содержит простые свойства для productCode
, categoryCode
и т.д. без конструктора аргументов
Ответы
Ответ 1
Как упоминалось выше, ваш JSON содержит Map<String,String>
и NOT Map<String,CartDataHelper>
: значения - это строки JSON, а не объекты JSON.
В идеале вы не должны пытаться записывать объекты как строки JSON; и если так, все будет работать.
Ответ 2
Кажется, что на стороне клиента json отправляется как строка вместо объекта в качестве объекта. Таким образом, на стороне сервера вы получаете строку, а не CartDataHelper, когда вы притворяетесь.
Попробуйте отправить JSON.parse(stringCartDataHelper)
. Это сработало для меня с той же проблемой.