我有一个这样的班级:
public class Wrapper<T> {
private String message;
private T data;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
我使用resttemplate如下:
...
Wrapper<Model> response = restTemplate.getForObject(URL, Wrapper.class, myMap);
Model model = response.getData();
...
但是它抛出一个:
ClassCastException
我读到:Issue when trying to use Jackson in java但没有帮助。有一些主题与我的问题等有关:https://jira.springsource.org/browse/SPR-7002和https://jira.springsource.org/browse/SPR-7023
有什么想法吗?
**PS:**我的错误是:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to a.b.c.d.Model
我认为resttemplate不能理解我的泛型变量,也许它接受它作为一个对象,而不是泛型T。所以它变成了一个LinkedHashMap。你可以从中读到here它说,当解释从什么它编组到:
JSON类型|Java类型
对象|LinkedHashMap
3条答案
按热度按时间nhhxz33t1#
ParameterizedTypeReference已在3.2 M2中引入,以解决此问题。
然而,postForObject/getForObject变量没有被引入。
vu8f3i0k2#
我认为你唯一能做的就是创建一个新的类来扩展Wrapper并使用model作为泛型。
这不是最好的解决方案,但至少你不必手动解组响应。
p1tboqfb3#
不要在RestTemplate中使用泛型。使用将隐藏泛型的 Package 器对象 Package 请求和响应对象。