相关疑难解决方法(0)

无法获得通用的ResponseEntity <T>,其中T是泛型类"SomeClass <SomeGenericType>"

请帮我弄一个ResponseEntity<T>地方T本身就是一个泛型类型.正如我现在所看到的,现在春天RestTemplate不支持这个.我正在使用Spring MVC 3.1.2版

这是我想要使用的代码:代码:

ResponseEntity<CisResponse<CisResponseEntity>> res =
         this.restTemplate.postForEntity(
             this.rootURL, myRequestObj, CisResponse.class);
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

Type mismatch: cannot convert from ResponseEntity<CisResponse> to
ResponseEntity<CisResponse<CisResponseEntity>>
Run Code Online (Sandbox Code Playgroud)

这是明显的错误,但我今天如何解决它?

比我想要获得我的通用响应类型:

CisResponse<CisResponseEntity> myResponse= res.getBody();
CisResponseEntity entity = myResponse.getEntityFromResponse();
Run Code Online (Sandbox Code Playgroud)

现在,我使用这个解决方案,postForObject()而不是postForEntity():

CisResponse<CisResponseEntity> response = 
          this.restTemplate.postForObject(
               this.rootURL,myRequestObj, CisResponse.class);
Run Code Online (Sandbox Code Playgroud)

java generics rest spring spring-mvc

22
推荐指数
1
解决办法
2万
查看次数

为什么此代码在包含在通用函数中时不起作用?

我使用此代码执行 HTTP POST 请求并反序列化返回值:

ParameterizedTypeReference<MyClass> typeRef = new ParameterizedTypeReference<>() {};
HttpEntity<Object> requestEntity = new HttpEntity<>("some text");
ResponseEntity<MyClass> result = restTemplate.exchange("/test", HttpMethod.POST, requestEntity, typeRef);
MyClass returnValue = result.getBody();
Run Code Online (Sandbox Code Playgroud)

为了更易于使用,我尝试将代码包装在一个函数中,如下所示:

public <T> T post(Object content, Class<T> returnType, String url){
    ParameterizedTypeReference<T> typeRef = new ParameterizedTypeReference<>() {};
    HttpEntity<Object> requestEntity = new HttpEntity<>(content);
    ResponseEntity<T> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, typeRef);
    return response.getBody();
}
Run Code Online (Sandbox Code Playgroud)

但是,代码在放入函数时停止运行。它抛出java.lang.ClassCastException: java.base/java.util.LinkedHashMap cannot be cast to client.rest.MyClass. 似乎某些类型信息在此过程中的某处丢失了。

这是2个测试用例形式的完整代码:

package client.rest;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.BeforeClass;
import org.junit.Test;
import …
Run Code Online (Sandbox Code Playgroud)

java generics spring function jackson

3
推荐指数
1
解决办法
2947
查看次数

标签 统计

generics ×2

java ×2

spring ×2

function ×1

jackson ×1

rest ×1

spring-mvc ×1