【问题标题】:Deserialization json array with different objects - jackson/spring具有不同对象的反序列化 json 数组 - jackson/spring
【发布时间】:2020-07-27 06:16:13
【问题描述】:

我有一个奇怪的 json 数组字符串:

[
  {
    "schema": "Cancel",
    "version": "1.0.0"
  },
  {
    "mandatory": true,
    "id": "uuid"
  }
]

它看起来像它的两个不同对象的数组,例如:

class Object1 {
private String schema;
private String version;
}

class Object2{
private boolean mandatory;
private String id;
}

当我调用 Spring Rest 模板时:

restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(), ObjectFull[].class)
                .getBody();

其中 ObjectFull 是包含来自前两个对象(Object1、Object2)的字段的对象。

我得到两个对象的数组。第一个有一些字段,第二个有其他字段。 一切正常。

但是我发现使用 objectFull[0].getSchema() 构建响应不够好。

是否有任何选项可以通过使用 Jackson 注释将这两个对象组合成一个彻底的反序列化过程?

而不是ObjectFull[] 的两个元素数组得到所有字段的简单ObjectFull

【问题讨论】:

  • 情况太奇怪了,我认为您需要实现自定义反序列化器。如果您不想这样做,则需要将其反序列化为 Map 对象的列表/数组,并使用 updateValue 方法将列表合并到预期对象。请让我知道您是否需要有关此或某些示例的帮助。

标签: java spring jackson deserialization


【解决方案1】:

由于 json 是 List 的表示形式,因此您无法将其中的两个对象反序列化为一个并填充所有字段。如果您确定您将始终收到一个包含两个对象的列表(相互补充),您可以编写一个简单的函数来接收该 json 并读取列表,然后创建一个对象,在其中设置具有值的字段来自两个列表元素,并返回该对象。

【讨论】:

    【解决方案2】:

    处理方法是创建类:

    导入 com.fasterxml.jackson.databind.JsonDeserializer;

    公共类 ObjectFull 扩展 JsonDeserializer

    并实现所需的方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      相关资源
      最近更新 更多