Spring RESTTemplate的泛型

我有一个这样的课:

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变体。

以上是 Spring RESTTemplate的泛型 的全部内容, 来源链接: utcz.com/qa/430175.html

回到顶部