消耗RestTemplate API响应

时间:2019-01-11 19:57:58

标签: java spring spring-boot spring-mvc resttemplate

我需要同样的帮助。我有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]

已编辑;

2 个答案:

答案 0 :(得分:1)

JSON响应与您的POJO不匹配,响应为JSONObjectJsonArray(键=“数据”)并且数组由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类不匹配。