我尝试返回一个ResponseEntity
列表,并将该响应转换为我的模型类。
例如:如果我使用ResponseEntity<List<ApplicationModel>>
,它工作得很好,但我不想为每个模型编写响应方法。
ResponseEntity
方法
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;
}
方法调用
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
发布于 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。
发布于 2018-06-11 16:01:32
使用mapper.convertValue
对我来说很有效。
ObjectMapper mapper = new ObjectMapper();
List<ApplicationModel> dtoApplications = mapper.convertValue(responseForApproles.getBody(), new TypeReference<List<ApplicationModel>>() {});
https://stackoverflow.com/questions/50778682
复制相似问题