java - 使用 Jackson 进行动态对象映射

标签 java json jackson

我有一个以下形式的 JSON 请求:

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

现在,类型字段指示对象字段的内容。在上面的示例中,type = Car 表示对象容器将具有 id、颜色和牌照字段。但是,如果 type = Plane,则 Object 字段将具有 id、wingspan、制造商等。基本上,type 字段将动态指示哪个 Java 对象对应于“对象”。我对 jackson 相当陌生,所以我一直在寻找一些关于如何在代码中实现这种类型的动态映射的指示。到目前为止我已经有了这个,

public class Request {
    @JsonProperty
    String type;

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

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

最佳答案

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

public class Request { 

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

    // Getters and setters
}

您可能会找到这个answer有用。

关于java - 使用 Jackson 进行动态对象映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44095462/

相关文章:

java - 如何获取子类中抽象类的字段(CORE JAVA)

jQuery JSON AJAX 请求失败

java - 是否可以通过 Jackson 获取嵌套子级的 JsonRootName ?

java - Jackson - 将 JSON 字符串字段映射到只有一个字段(字符串)的类/pojo

java - 使用 com.fasterxml.jackson 而不是 org.json 解析 Json

java - 是否可以创建一个等待整个 try block 执行的 catch block ?

java - 电话应用程序 : item cannot be resolved or is not a field

ios - AFNetworking 与 put 和 request 主体

java - 如何使用Gson删除Json对象的嵌套字段

java - @Transactional 和继承