[英]RestTemplate map JSON key-value pair object with with dynamic keys
对于使用Java Spring RestTemplate完成的HTTP请求,我获得了带有动态键的JSON键-值对对象的响应,如下所示。
响应:
{
"1234x": {
"id": "1234x",
"description": "bla bla",
...
},
"5678a": {
"id": "5678a",
"description": "bla bla bla",
...
},
...
}
如何将响应对象映射到POJO或Map?
我正在使用RestTemplate如下。
RestTemplate restTemplate = new RestTemplate();
String url = "my url";
HttpHeaders headers = new HttpHeaders();
HttpEntity entity = new HttpEntity(headers);
response = restTemplate.exchange(url, HttpMethod.GET, entity, ???);
您可以使用new ObjectMapper.readValue()
并将TypeReference
指定为new TypeReference<Map<String, SimplePOJO>>() {});
public static void main(String[] args) throws IOException {
final String json = "{\"1234x\": {\"id\": \"1234x\", \"description\": \"bla bla\"}, \"5678a\": {\"id\": \"5678a\", \"description\": \"bla bla bla\"}}";
Map<String, SimplePOJO> deserialize =
new ObjectMapper().readValue(json, new TypeReference<Map<String, SimplePOJO>>() {});
}
public static class SimplePOJO {
private String id;
private String description;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SimplePOJO that = (SimplePOJO) o;
return Objects.equals(id, that.id) &&
Objects.equals(description, that.description);
}
@Override
public int hashCode() {
return Objects.hash(id, description);
}
}
您可以将ParameterizedTypeReference与Map一起使用(您可以根据自己的用例进行自定义):
response = restTemplate.exchange(url, HttpMethod.GET, entity, new ParameterizedTypeReference<Map<String, Object>>() {});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.