我目前使用common api client util
spring rest template
。{
我们的api结果如下......
单一结果:
{
"data" : {
"id" : "...",
"name" : "..."
...
}
}
多重结果:
{
"data" : {
"cnt" : 30,
"list" : [
{
"id" : "...",
"name" : "..."
...
},
{
"id" : "...",
"name" : "..."
...
},
{
"id" : "...",
"name" : "..."
...
}
...
]
}
}
我做了两个常见的响应类,如下面的
public class Response<T> {
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
和
public class ListResponse<T> {
private long cnt;
private List<T> list;
public long getCnt() {
return cnt;
}
public void setCnt(long cnt) {
this.cnt = cnt;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
使用RestTemplate
的示例是
public <T> T apiCaller(String api){
T result= restTemplate.exchange(api,
HttpMethod.GET,
new HttpEntity<>(headers),
new ParameterizedTypeReference<Response<T>>(){}).getBody().getData();
return result;
}
然后我用了,
当结果是单一时,
UserResponse user = apiRequest.<UserResponse>apiCaller("/users/1");
当结果为多个时,
ListResponse<UserResposne> users = apiRequest.<ListResponse<UserResponse>>apiCaller("/users");
但它也不起作用。
它出现java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.joont.Response.ListResponse
。
所以我在谷歌搜索了这么多,但我没有搜索如何...
我该如何解决这个问题呢?
我做错了?这不可能吗?