【问题标题】:Dynamic object mapping using Jackson使用 Jackson 的动态对象映射
【发布时间】:2017-10-21 02:01:04
【问题描述】:

我有一个 JSON 请求,格式如下:

{
  "type": "Car"
  "data": {
      "object": {
          "id": "1"
          "color": "Red"
          "plate": "J124D"
      },
      "owner": {
          "name": "John"
      }
  }
}

现在,类型字段决定了对象字段的内容。在上面的示例中,type = Car 表示对象容器将具有 id、color 和 plate 字段。但是,如果 type = Plane,Object 字段将有 id、wingspan、manufacturer 等。基本上,type 字段将动态地规定 Java 对象对应于“对象”。我对杰克逊还很陌生,所以我一直在寻找一些关于如何在代码中实现这种类型的动态映射的指针。到目前为止,我有这个,

public class Request {
    @JsonProperty
    String type;

    @JsonProperty
    Data data; // Probably need a custom deserializer here?
}

另一个难点是Request的使用。可能必须将数据转换为 CarData 或 PlaneData 之类的东西,以便调用者可以轻松地执行 request.getType(),然后从转换为适当数据类型(汽车或飞机)的请求中提取数据。

【问题讨论】:

标签: java json jackson


【解决方案1】:

一种简单的方法是使用Map<String, Object> 映射data 属性:

public class Request { 

    private String type;
    private Map<String, Object> data;

    // Getters and setters
}

您可能会发现这个answer 很有用。

【讨论】:

  • 对不起,我没完全听懂。您能否留下一个小代码示例来解释。非常感谢
  • @JohnBaum 这个answer 可能有用。
【解决方案2】:

为对象标签创建一个 POJO。使用 JSONObject 类,您可以将值相应地映射到 java POJO。

参考:https://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

【讨论】:

  • 如果不是太麻烦,您介意发布一个简短的示例来说明如何执行此操作或链接到外部资源吗?提前致谢!
  • 请通过提供的链接
猜你喜欢
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 2019-06-26
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多