使用根数组

时间:2018-02-26 15:48:02

标签: java json spring jackson resttemplate

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

想象一下,SpaceX类和Rocket类,而SpaceX类具有List<Rocket>属性。我使用@JsonProperty注释让Rest模板绑定&#34; Rocket ID&#34;和&#34;名称&#34;自动在Rocket对象内。

我的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对象,让Rest模板自动填入List<Rocket>。 我不能回答如何做到这一点的答案。我无法通过@JsonProperty告诉Rest模板绑定列表,因为没有名称。

1 个答案:

答案 0 :(得分:1)

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

  

@JsonCreator注释用于调整构造函数/工厂   用于反序列化。当我们需要反序列化时,它非常有用   一些JSON与我们需要的目标实体不完全匹配。

     

@JsonValue表示应该用于序列化的单个方法   整个实例。

或@JsonSerialize和@JsonDeserialize:

  

@JsonSerialize用于表示将使用自定义序列化程序   对该实体进行编组。

     

@JsonDeserialize用于表示使用自定义反序列化器。

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