Чтобы использовать общие типы с Spring RestTemplate, нам нужно использовать ParameterizedTypeReference
(Невозможно получить общий ResponseEntity <T> , где T - общий класс" SomeClass <SomeGenericType> ; ")
Предположим, что у меня есть некоторый класс
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 я понимаю концепцию. К сожалению, я недавно зарегистрирован здесь, поэтому я не могу прокомментировать его ответ, поэтому напишу его здесь. Я не уверен, что я четко понимаю, как реализовать предложенный подход для решения моей проблемы с помощью Map
с помощью клавиши Class
(предложенный @Sotirios в конце его ответа). Кто-нибудь попытается привести пример?