簡體   English   中英

Java Spring 引導消耗 API 嵌套 object 返回 NULL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM