我有一个这样的课:
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和https://jira.springsource.org/browse/SPR-7023
有任何想法吗?
PS:我的错误是:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to a.b.c.d.Model
我认为resttemplate无法理解我的通用变量,也许它将它接受为Object而不是通用T。因此它变成了LinkedHashMap。您可以在此处阅读它说,当解释从其编组为:
JSON Type | Java Type
object | LinkedHashMap
在3.2 M2中引入了ParameterizedTypeReference来解决此问题。
Wrapper<Model> response = restClient.exchange(loginUrl, HttpMethod.GET, null, new ParameterizedTypeReference<Wrapper<Model>>() {}).getBody();
但是,未引入postForObject / getForObject变体。