10

我正在尝试使用 Spring build Jackson 支持解析从控制器中的 UI 发送的 JSON 数据,这是我的代码

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参数构造函数

4

2 回答 2

7

如评论所述,您的 JSON 包含Map<String,String>和 NOT Map<String,CartDataHelper>:值是 JSON 字符串,而不是 JSON 对象。

理想情况下,您不会尝试将对象写成 JSON 字符串;如果是这样,事情就会奏效。

于 2012-10-09T16:43:52.763 回答
0

似乎在客户端,json作为字符串而不是作为对象发送。这样,在服务器端,您将收到一个字符串,而不是您假装的 CartDataHelper。

尝试发送JSON.parse(stringCartDataHelper)。它对我有同样的问题。

于 2015-05-27T17:53:03.603 回答