现在,我有一个方法
public <T> ResponseEntity<List<T>> getProduct(String resource, Map<String, String> queryParams)
throws Exception {
return getRestTemplate().exchange(endpointAddress + resource, HttpMethod.GET, new HttpEntity(createHeaders()),
new ParameterizedTypeReference<List<T>>(){}, queryParams);
}
当我在我的Adapter类中调用这个方法ResponseEntity<List<Product>> myProduct = myServer.getProduct("someURL", myQuery)
时,它工作得很好。如果我调用LOG.debug()
这个response.getBody().toString()
,我会得到类似<200,[{name="Terry", ID=4234, City="Dallas"}]>
的东西。我的Product
类有getName()
和getID()
这样的方法。我不能简单地做response.getBody().get(0).getID()
,因为Jackson不知道我使用的对象类型。我试过做:
ObjectMapper mapper = new ObjectMapper();
List<Product> product = mapper.convertValue(response.getBody(), new TypeReference<List<Product>>() {});
另一方面,我可以将主体转换为json
String json = mapper.writeValueAsString(wlsProduct.getBody().get(0));
并解析它以获得响应,但我更愿意使用Product
类中的方法。
编辑:我得到的错误是java.lang.ClassCastException
2条答案
按热度按时间6jygbczu1#
myServer.getProduct("someURL", myQuery)
不会返回Product
的列表,而是返回LinkedHashMap
的列表。您可能会得到java.lang.ClassCastException
(下次您应该在问题中指定异常,这样我们就不必进行假设)。一旦您将
getProduct
方法更改为如下所示,您的代码应该可以按预期方式工作:为什么是泛型?你的
getProduct()
似乎是特定于Produt
的。j13ufse22#
你的身体看起来像
<200,[valid JSON content]>
,所以从你的身体删除“200,”在hte开始和“〉”在结束,你应该很好要从Json字符串读取到对象,请执行以下操作:
其中data是类的一个示例-
Product
,type是类的一个示例。我猜应该是Product.class
。但是对于列表,它有点问题。您可以将Json读为List<Map>>
,然后运行列表并将每个Map转换为Person示例