请帮我得到一个ResponseEntity<T>其中T本身是一个通用类型。如我现在所见,Spring RestTemplate现在不支持此功能。我正在使用Spring MVC版本3.1.2这是我要使用的代码:码:ResponseEntity<CisResponse<CisResponseEntity>> res = this.restTemplate.postForEntity( this.rootURL, myRequestObj, CisResponse.class);我收到此错误:Type mismatch: cannot convert from ResponseEntity<CisResponse> toResponseEntity<CisResponse<CisResponseEntity>>这是明显的错误,但是今天如何解决呢?比我想得到我的通用响应类型:CisResponse<CisResponseEntity> myResponse= res.getBody();CisResponseEntity entity = myResponse.getEntityFromResponse();现在,我使用此解决方案,使用postForObject()而不是postForEntity():CisResponse<CisResponseEntity> response = this.restTemplate.postForObject( this.rootURL,myRequestObj, CisResponse.class); 最佳答案 这是a known issue。现在,通过引入ParameterizedTypeReference修复了该问题,它是您显式继承的参数化类型,可在运行时提供类型信息。这被称为超类型令牌,可解决类型擦除的问题,因为子类(在这种情况下是匿名的)在运行时保留通用超类型的类型参数。但是,您不能使用postForObject,因为该API仅支持exchange():ResponseEntity<CisResponse<CisResponseEntity>> res = template.exchange( rootUrl, HttpMethod.POST, null, new ParameterizedTypeReference<CisResponse<CisResponseEntity>>() {});请注意,最后一行演示了super type tokens的概念:您没有提供文字CisResponse.class,而是提供了参数化类型ParameterizedTypeReference<T>的匿名实例化,可以在运行时提取其子类型信息。您可以将超级类型令牌视为实现Foo<Bar<Baz>>.class的黑客顺便说一句,在Java中,您不需要在this之前添加对实例变量的访问权限:如果您的对象定义了url和template成员,则只需使用其简单名称即可访问它们,而不是像您一样通过前缀进行添加和this.url
07-27 21:54