我正在尝试使用Rest Template将JSON绑定到POJO。

假设有一个SpaceX类和一个Rocket类,而SpaceX类具有一个List<Rocket>属性。我使用@JsonProperty批注使Rest模板自动在Rocket对象内绑定“火箭ID”和“名称”。

我的JSON文件从数组开始,如下所示:

[
  {
    "Rocket ID": "1",
     "name": "A"
  },
  {
    "Rocket ID": "2",
     "name": "B"
  }
]


我可以使用JSON文件并手动填充List<Rocket>,如下所示:

public <T> List<T> createObjectsFromJSON(Class<T[]> responseType) {
    ResponseEntity<T[]> responseEntity = restTemplate.exchange(URL, HttpMethod.GET, request, responseType);
    T[] objects = responseEntity.getBody();
    List<T> list = Arrays.asList(objects);
    return list;
}


但是我想创建一个SpaceX对象,然后让“休息模板”自动填写List<Rocket>
我无法确定如何解决的问题。我不能告诉Rest Template通过@JsonProperty绑定列表,因为没有名称。

最佳答案

如果您无法更改JSON结构,则必须编写自定义序列化和反序列化逻辑。您可以使用@JsonCreator和@JsonValue批注:


  @JsonCreator批注用于调整构造函数/工厂
  用于反序列化。需要反序列化时非常有用
  一些与我们需要获取的目标实体不完全匹配的JSON。
  
  @JsonValue指示应用于序列化的单个方法
  整个实例。


或@JsonSerialize和@JsonDeserialize:


  @JsonSerialize用于指示自定义序列化程序将用于
  编组实体。
  
  @JsonDeserialize用于指示自定义解串器的使用。


本文包含更多详细信息和示例:http://www.baeldung.com/jackson-annotations

10-05 18:33