首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >返回并转换ResponseEntity<List<T>>

返回并转换ResponseEntity<List<T>>
EN

Stack Overflow用户
提问于 2018-06-10 05:24:42
回答 2查看 8K关注 0票数 2

我尝试返回一个ResponseEntity列表,并将该响应转换为我的模型类。

例如:如果我使用ResponseEntity<List<ApplicationModel>>,它工作得很好,但我不想为每个模型编写响应方法。

ResponseEntity 方法

代码语言:javascript
复制
    public static <T> ResponseEntity<List<T>> getResponseList(String resourceURL) {
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));

    HttpEntity<List<T>> entity = new HttpEntity<List<T>>(headers);
    ResponseEntity<List<T>> response = restTemplate.exchange(resourceURL, HttpMethod.GET, entity,
            new ParameterizedTypeReference<List<T>>() {
            }, Collections.emptyMap());

    return response;
}

方法调用

代码语言:javascript
复制
    private final String url ="http://localhost:8090/xxx/application";

    ResponseEntity<List<ApplicationModel> responseForApplications =
 ResponseTemplate.getResponseList(url);

    if (responseForApplications.getStatusCode() == HttpStatus.OK) 
         List<ApplicationModel> dtoApplications = responseForApplications.getBody();

我想转换为的JSON响应的示例

{"id":1,“名称”:“foo”,"description":"foo"}

错误

出现意外错误(type=Internal服务器错误,status=500)。创建名为‘java.lang.ClassCastException’的bean时出错:调用init方法失败;嵌套异常为java.lang.ClassCastException:无法将java.util.LinkedHashMap强制转换为com.xxx.ApplicationModel

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-10 06:30:56

这个问题来自杰克逊。当它没有足够的信息来反序列化到哪个类时,它就会使用LinkedHashMap。

因为您没有通知Jackson您的ArrayList的元素类型,所以它不知道您想要反序列化为ApplicationModels的ArrayList。因此,它会回退到默认设置。

相反,您可能会使用as(JsonNode.class),然后以比rest-assured允许的更丰富的方式处理ObjectMapper。

有关更多信息,请参阅java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.testing.models.Account

票数 2
EN

Stack Overflow用户

发布于 2018-06-11 16:01:32

使用mapper.convertValue对我来说很有效。

代码语言:javascript
复制
ObjectMapper mapper = new ObjectMapper();
List<ApplicationModel> dtoApplications = mapper.convertValue(responseForApproles.getBody(), new TypeReference<List<ApplicationModel>>() {});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50778682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档