Ответ 1
Это была известная проблема. Теперь он исправлен с введением ParameterizedTypeReference
, который является параметризованным типом, который вы явно наследуете для предоставления информации о типе во время выполнения. Это называется маркером супертипа и работает с тире стирания, потому что подклассы (в этом случае анонимы) хранят аргументы типа универсального супертипа во время выполнения.
Однако вы не можете использовать postForObject
, потому что API поддерживает только exchange()
:
ResponseEntity<CisResponse<CisResponseEntity>> res = template.exchange(
rootUrl,
HttpMethod.POST,
null,
new ParameterizedTypeReference<CisResponse<CisResponseEntity>>() {});
Обратите внимание, что последняя строка демонстрирует идею маркеров супертекста: вы не поставляете литерал CisResponse.class
, но анонимный экземпляр параметризованного типа ParameterizedTypeReference<T>
, который во время выполнения можно ожидать, чтобы извлечь информацию о подтипе. Вы можете думать о маркеры супер-типа, как взломы для достижения Foo<Bar<Baz>>.class
BTW, в Java вам не нужно префикс доступа к переменной экземпляра с помощью this
: если ваш объект определяет членов url
и template
, просто обращайтесь к ним с их простым именем, а не с помощью префикса вы делаете this.url
и this.template