最佳答案
要在 SpringRestTemplate 中使用泛型类型,我们需要使用 ParameterizedTypeReference
(无法获取泛型 ResponseEntity < T > ,其中 T 是泛型类“ Some Class < Some GenericType >”)
假设我有一些类
public class MyClass {
int users[];
public int[] getUsers() { return users; }
public void setUsers(int[] users) {this.users = users;}
}
和一些包装类
public class ResponseWrapper <T> {
T response;
public T getResponse () { return response; }
public void setResponse(T response) {this.response = response;}
}
所以如果我尝试做这样的事情,一切都没问题。
public ResponseWrapper<MyClass> makeRequest(URI uri) {
ResponseEntity<ResponseWrapper<MyClass>> response = template.exchange(
uri,
HttpMethod.POST,
null,
new ParameterizedTypeReference<ResponseWrapper<MyClass>>() {});
return response;
}
但是当我试图创建上述方法的通用变体时..。
public <T> ResponseWrapper<T> makeRequest(URI uri, Class<T> clazz) {
ResponseEntity<ResponseWrapper<T>> response = template.exchange(
uri,
HttpMethod.POST,
null,
new ParameterizedTypeReference<ResponseWrapper<T>>() {});
return response;
}
然后像这样调用这个方法。
makeRequest(uri, MyClass.class)
而不是得到 ResponseEntity<ResponseWrapper<MyClass>>
对象,我得到的是 ResponseEntity<ResponseWrapper<LinkedHashSet>>
对象。
我如何解决这个问题? 它是一个 RestTemplate 错误吗?
多亏了@Sotirios,我才明白了这个概念。不幸的是,我是新注册的,所以我不能评论他的回答,所以写在这里。我不确定我是否清楚地理解如何实现提议的方法来解决我的 Map
与 Class
键的问题(提议由@Sotirios 在他的答案的末尾)。有人能举个例子吗?