【问题标题】:Can not deserialize instance with jackson无法用杰克逊反序列化实例
【发布时间】:2014-05-15 08:23:14
【问题描述】:

我正在开发一个 RESTful 应用程序,其中响应作为 JSON 字符串从 Extjs 传递到 java ,所以我使用 jackson 反序列化到 java POJO。

以下是我的要求:

{
  "filter": "[{"type":"string","value":"sdadsadsa","field":"groupName"}]",
  "limit": 10
}

FilterParams 类如下所示:

class FilterParams {

    @JsonProperty( value = "type" )
    private String type;

    /** The value. */
    @JsonProperty( value = "value" )
    private String value; 

    /** The group name. */
    @JsonProperty( value = "field" )
    private String field;
}

使用以下代码转换为 pojo

mapper.readValue(json, FilterParams.Class);

但仍然收到“无法反序列化 FilterParams 的实例”。如何将其转换为 pojo。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 哪个类有FilterParams 的列表和一个名为limit 的数值?这就是您需要在 mapper.readValue(json, ?.class); 中反序列化到的类 映射到 FilterParams 类的 json 的唯一部分是 {"type":"string","value":"sdadsadsa","field":"groupName"}

标签: java extjs serialization jackson


【解决方案1】:
  1. 您的 JSON 无效。如果是 JSON 数组,filter 的值不应以 " 开头,如果是 String,则应转义内部 "
  2. 您的 FilterParams 类根本不反映 JSON 中的数据:它应该有一个 limit int 属性和一个 arrayCollectionFilters
  3. 那么你应该有一个具有typevaluefield 属性的Filter

【讨论】:

    【解决方案2】:

    您的 JSON 包含 2 个元素:过滤器和限制,因此 Jackson 无法将此 JSON 字符串匹配到 FilterParams 对象中。

    要忽略处理限制的 JSON 部分,请执行以下操作:

    JsonNode tree = mapper.readTree(<JSON_STRING>);
    FilterParams fp = mapper.treeToValue(tree.get("filter"), FilterParams.class);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 2019-08-04
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      • 2015-04-07
      相关资源
      最近更新 更多