我尝试使用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模板绑定列表,因为没有名称。
答案 0 :(得分:1)
如果您无法更改JSON结构,则必须编写自定义序列化和反序列化逻辑。您可以使用@JsonCreator和@JsonValue注释:
@JsonCreator注释用于调整构造函数/工厂 用于反序列化。当我们需要反序列化时,它非常有用 一些JSON与我们需要的目标实体不完全匹配。
@JsonValue表示应该用于序列化的单个方法 整个实例。
或@JsonSerialize和@JsonDeserialize:
@JsonSerialize用于表示将使用自定义序列化程序 对该实体进行编组。
@JsonDeserialize用于表示使用自定义反序列化器。
本文包含更多详细信息和示例:http://www.baeldung.com/jackson-annotations