【问题标题】:JsonMappingException no single-String constructor/factory method JacksonJsonMappingException 没有单字符串构造函数/工厂方法 Jackson
【发布时间】:2012-09-29 09:42:58
【问题描述】:

我正在尝试使用 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 类包含用于productCodecategoryCode 等的简单属性,没有参数构造函数

【问题讨论】:

  • 那个 JSON 数据看起来像是被双重转义了。所以虽然它可能是有效的,但我认为它并不代表你认为它的作用。它表示一个具有两个属性(“0”和“1”)的对象,每个属性的值看起来像 JSON 编码的对象,表示为字符串。
  • @Ramon:有没有办法改变结构来满足这个要求?
  • 这取决于产生它的代码,我猜。
  • 您是如何创建 JSON 数据的?你能证明一下吗?

标签: java json spring-mvc jackson


【解决方案1】:

正如 cmets 所述,您的 JSON 包含 Map&lt;String,String&gt; 而不是 Map&lt;String,CartDataHelper&gt;:值是 JSON 字符串,而不是 JSON 对象。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-12
      • 1970-01-01
      • 2020-10-06
      • 2012-06-06
      • 2021-09-22
      • 2023-03-16
      • 2014-10-01
      • 1970-01-01
      • 2014-07-20
      相关资源
      最近更新 更多