[英]Post API using Spring Boot returns null values for nested json
[英]Java Spring Boot consuming API with nested object returns NULL
我正在玩 spring 引导,试图使用第三方 rest api。
我正在使用的 API 调用返回以下 JSON object。
{"success":true,"terms":"https:\/\/coinlayer.com\/terms","privacy":"https:\/\/coinlayer.com\/privacy","timestamp":1645616586,"target":"USD","rates":{"BTC":39049.424242}}
我的代码成功使用了这个 JSON object 但是它返回了这个。
LiveData{success='true'terms='https://coinlayer.com/terms'privacy='https://coinlayer.com/privacy'timestamp='1645619886'target='EUR'rates={BTC='null'}}
请注意,rates={BTC='null'} 应该是 rates={BTC='39049.424242'}。 任何帮助是极大的赞赏。
下面是我的代码
LiveData.java
package com.example.consumingrest;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class LiveData {
private Boolean success;
private String terms;
private String privacy;
private Long timestamp;
private String target;
private Rates rates;
public LiveData() {
}
public Boolean getSuccess() {
return success;
}
public void setSuccess(Boolean success) {
this.success = success;
}
public String getTerms() {
return terms;
}
public void setTerms(String terms) {
this.terms = terms;
}
public String getPrivacy() {
return privacy;
}
public void setPrivacy(String privacy) {
this.privacy = privacy;
}
public Long getTimestamp() {
return timestamp;
}
public void setTimestamp(Long timestamp) {
this.timestamp = timestamp;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public Rates getRates() {
return rates;
}
public void setValue(Rates rates) {
this.rates = rates;
}
@Override
public String toString() {
return "LiveData{" +
"success='" + success + '\'' +
"terms='" + terms + '\'' +
"privacy='" + privacy + '\'' +
"timestamp='" + timestamp + '\'' +
"target='" + target + '\'' +
"rates=" + rates +
'}';
}
}
费率.java
package com.example.consumingrest;
import java.math.BigDecimal;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Rates {
private BigDecimal BTC;
public Rates() {
}
public BigDecimal getBTC() {
return this.BTC;
}
public void setId(BigDecimal BTC) {
this.BTC = BTC;
}
@Override
public String toString() {
return "{" +
"BTC='" + BTC + '\''+
'}';
}
}
ConsumingRest.java(主要)
package com.example.consumingrest;
import java.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class ConsumingRestApplication {
private static final Logger log = LoggerFactory.getLogger(ConsumingRestApplication.class);
public static void main(String[] args) {
SpringApplication.run(ConsumingRestApplication.class, args);
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
@Bean
public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
return args -> {
LiveData liveData = restTemplate.getForObject(
"http://api.coinlayer.com/api/live?access_key=121a4df8b95fd5be872da3bad101cd73&target=EUR&symbols=BTC", LiveData.class);
log.info(liveData.toString());
};
}
}
您可以使用 @JsonProperty 注释。
@JsonProperty(value = "BTC")
BigDecimal btc;
不是驼峰式大小写是它是 null 的原因,而且某些字段也可能有问题。 最好为那些有问题的属性编写注释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.