gpt4 book ai didi

java - 带有 Spring RESTTemplate 的泛型

转载 作者:IT老高 更新时间:2023-10-28 13:02:28 26 4
gpt4 key购买 nike

我有这样的课:

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-7002https://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 Type | Java Type

object | LinkedHashMap

最佳答案

ParameterizedTypeReference 已在 3.2 M2 中引入以解决此问题。

Wrapper<Model> response = restClient.exchange(loginUrl, 
HttpMethod.GET,
null,
new ParameterizedTypeReference<Wrapper<Model>>() {}).getBody();

但是,没有引入 postForObject/getForObject 变体。

关于java - 带有 Spring RESTTemplate 的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8108887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com