在具有泛型参数的泛型方法中使用 Spring RestTemplate
要将泛型类型与Spring RestTemplate一起使用,我们需要使用(无法获取泛型响应实体<T>其中T是泛型类“SomeClass<SomeGenericType>ParameterizedTypeReference
)
假设我有一些类
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 错误吗?
更新 1多亏了@Sotirios我理解了这个概念。不幸的是,我是新来的,所以我不能评论他的答案,所以写在这里。我不确定我是否清楚地理解了如何实现建议的方法来解决我的问题与key(由@Sotirios在他的答案末尾提出)。有人介意举个例子吗?Map
Class