我已经有一个REST服务正在运行,它返回下面的示例JSON:
{
"_embedded" : {
"artist" : [ {
"name" : "+44",
"genre" : "Rock",
"country" : "USA",
"id" : 469,
"_links" : {
"self" : {
"href" : <ADDRESS>
},
"albumList" : {
"href" : <ADDRESS>
}
}
} ]
}
}
我尝试使用RestTemplate来使用此资源,如下例所示
public static void main(String args[]) {
RestTemplate restTemplate = new RestTemplate();
Artist[] artistList = restTemplate.getForObject("http://localhost:8080/artists/search/findByName?name=+44", Artist[].class);
for (Artist a : artistList)
System.out.println(a.toString());
}
}
当debbuger命中getForObject行时,会出现此错误:
Exception in thread "main" org.springframework.http.converter.HttpMessageNotReadableException:
Could not read JSON: Can not deserialize instance of br.com.lagranzotto.itunes.frontend.entity.Artist[] out of START_OBJECT token
我已经在互联网上广泛搜索了大约一个星期,没有成功找到这个例外的原因。
答案 0 :(得分:1)
您似乎在Web服务中使用了Spring Data PagedResources,因此返回的Artist数据列表被封装在JSON中的_embedded
属性中。所以RestTemplate并不知道如何反序列化。
查看Why does RestTemplate not bind response representation to PagedResources?并查看Oliver Gierke的回复。