我需要同样的帮助。我有POJO类,我需要使用starwar API,获取结果并将其转换为对象。
@JsonIgnoreProperties(ignoreUnknown = true)
public class Planeta {
private String name;
private String climate;
private String terrain;
Getters and Setters...
Application.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]
已编辑;
答案 0 :(得分:1)
JSON响应与您的POJO不匹配,响应为JSONObject
和JsonArray
(键=“数据”)并且数组由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()));
答案 1 :(得分:0)
API返回一个带有键data
的对象,该对象内部有一系列行星,而不是一个。您只需要一个,就没有数据字段。 JSON与您预期的Planeta类不匹配。