我有一堂这样的课:
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
我读到:尝试在 java 中使用 Jackson 时出现问题但没有帮助。有一些与我的问题相关的主题等:https://jira.springsource.org/browse/SPR-7002 and 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类型
对象|链接哈希映射
3.2 M2 中引入了 ParameterizedTypeReference 来解决此问题。
Wrapper<Model> response = restClient.exchange(loginUrl,
HttpMethod.GET,
null,
new ParameterizedTypeReference<Wrapper<Model>>() {}).getBody();
但是,没有引入 postForObject/getForObject 变体。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)