java - 使用 RestTemplate API 响应
问题描述
我需要同样的帮助。我有 POJO 类,我需要使用 starwar API,获取结果并将其转换为对象。
@JsonIgnoreProperties(ignoreUnknown = true)
public class Planeta {
private String name;
private String climate;
private String terrain;
Getters and Setters...
应用程序.java
package hello;
@SpringBootApplication
public class Application {
private static final Logger log = LoggerFactory.getLogger(Application.class);
public static void main(String args[]) {
SpringApplication.run(Application.class);
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
@Bean
public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
return args -> {
Planeta planeta = restTemplate.getForObject("http://localhost:8080/planeta/name/terra", Planeta.class);
log.info(planeta.getName());
};
}
}
出于某种原因,我得到了空值。
url api结果是
{"data":[{"id":"5c378401c0ac520ffc670019","name":"terra","climate":"tropical","terrain":"earth"}],"erros":null}
日志
Application : Planeta [name=null, climate=null, terrain=null]
编辑;
解决方案
JSON 响应与您的 POJO 不匹配,响应JSONObject
带有JsonArray
(key = "data") 并且数组由Planeta
对象组成
@JsonIgnoreProperties(ignoreUnknown = true)
public class Response{
@JsonProperty("data")
List<Planeta> data;
}
如果您在 中只有一个Planeta
对象List
,
Planeta p = data.stream().findFirst().get();
System.out.println(p.getName());
如果你有多个对象List
对于每个
for(Planeta p :data) {
System.out.println(p.getName());
// same for climate and terrain
}
java-8
data.forEach(planeta-> System.out.println(planeta.getName()));
推荐阅读
- css - 防止 Bootstrap 4 自动填充列换行到下一行
- ruby - 在 Ruby 中将哈希作为参数传递
- c# - SKCanvas.DrawCircle() 正在绘制正方形
- excel - 将 Excel 的文本框添加到 Powerpoint VBA
- c# - 使用 sigcheck 工具将 streamreader 数据输出到 csv
- amazon-web-services - Google Cloud 是否为其计算实例提供公共主机名?
- php - 在 Woocommerce 上更改代码功能内的文本颜色
- arrays - 多个数组到数据框熊猫
- excel - 使用形状的位置删除行
- group-by - 按 2 个字段分组 oracle sql 内连接