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). Это сработало для меня с той же проблемой.