如何解决JSON 对象数组到 pojo
当我从邮递员调用 REST 服务 (GET) 时,它会检索结果。但是当试图从代码中使用服务时,我没有按预期获得数据。我怀疑它与 JSON/POJO 映射有关。我尝试了不同的方法,但没有给出结果。这里可能有什么问题?
这是我从邮递员那里尝试时的 json 响应
[
{
"id": 20,"type": 2,"data": {
"name": "car"
}
},{
"id": 20,"data": {
"name": "car"
}
}
]
这是我的 pojo:
class Market{
public int id;
public int type;
public MarketData data;
}
class MarketData {
public Strig name;
}
这是我使用服务的方式:
HttpClient client = HttpClients.custom().build();
HttpUriRequest request = RequestBuilder.get()
.setUri("url")
.setHeader(HttpHeaders.CONTENT_TYPE,"application/json")
.setHeader(HttpHeaders.ACCEPT,"application/json")
.build();
HttpResponse response = client.execute(request);
if (response.getStatusLine().getStatusCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
ObjectMapper mapper = new ObjectMapper();
MarketData[] marketData = mapper.readValue(response.getEntity().getContent(),MarketData[].class);
解决方法
正如 Nico 在评论中指出的那样,我认为您在 objectMapper.readValue()
行上有一个错字。它应该为 Market
而不是 MarketData
提供数组类型。我的意思是这一行:
MarketData[] marketData = mapper.readValue(response.getEntity().getContent(),MarketData[].class);
实际上应该是:
Market[] markets = objectMapper.readValue(response,Market[].class);
我像这样测试了这段代码:
File responseFile = new File(JsonObjectArrayToPojo.class.getResource("/response.json").getFile());
String response = new String(Files.readAllBytes(responseFile.toPath()));
ObjectMapper objectMapper = new ObjectMapper();
Market[] markets = objectMapper.readValue(response,Market[].class);
System.out.println("marketData length " + markets.length);
for (Market m : markets) {
System.out.printf("\tid: %s",m.id);
System.out.printf("\ttype: %s",m.type);
System.out.printf("\tdata name: %s",m.data.name);
System.out.println();
}
我将此 response.json
添加到我的资源目录中:
[{
"id": 20,"type": 2,"data": { "name": "car"}
},{
"id": 10,"type": 1,"data": { "name": "Bike" }
}]
这将打印以下输出:
marketData length 2
id: 20 type: 2 data name: car
id: 10 type: 1 data name: Bike
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。