【发布时间】:2020-11-17 16:25:15
【问题描述】:
我有一个案例可以将响应从 Dogs API
到这样的不同结构:
[
{
"breed": "pug",
"sub_breed": []
},
{
"breed": "ridgeback",
"sub_breed": [
{
"breed": "rhodesian",
"sub_breed": []
}
]
},
{
"breed": "doberman",
"sub_breed": []
},
{
"breed": "hound",
"sub_breed": [
{
"breed": "Ibizan",
"sub_breed": []
},
{
"breed": "afghan",
"sub_breed": []
}
]
}
]
收到回复后一头雾水,不知道怎么转换。
在收到回复之前我会这样做
public List<DogResponse> getDogs() {
List<DogResponse> response = new ArrayList<DogResponse>();
try {
String url = "https://dog.ceo/api/breeds/list/all";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> result = restTemplate.getForEntity(url, String.class);
ObjectMapper mapper = new ObjectMapper();
Map<String, String> map = mapper.readValue(result.getBody().toString(), Map.class);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map.get("message")));
for (Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println("key : "+key);
System.out.println("val : "+value);
}
} catch (Exception e) {
// TODO: handle exception
}
return response;
}
狗的反应
public class DogResponse {
private String breed;
private DogResponse sub_breed;
public String getBreed() {
return breed;
}
public void setBreed(String breed) {
this.breed = breed;
}
public DogResponse getSub_breed() {
return sub_breed;
}
public void setSub_breed(DogResponse sub_breed) {
this.sub_breed = sub_breed;
}
}
我正在尝试使用 Map,但是当我想打印键和值时失败了,它什么也没显示。
【问题讨论】:
-
也许这是一个像Dozer这样的映射框架的案例
-
看完你的代码后,我想知道你的 DogResponse DTO 是做什么用的?在我看来,尝试将您的响应推送到 String 映射中并不好。然后你甚至可以省略 RestTemplate,做一个普通的 http 请求并自己解析 JSON。
-
您可以从将响应映射到 List
标签: java json spring spring-boot dictionary