我正在尝试使用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