首页 > 解决方案 > 使用 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]

编辑;

标签: javaspringspring-bootspring-mvcresttemplate

解决方案


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()));

推荐阅读