2017-07-20 18 views
1

我試圖消費API返回XML。 的API網址:api消費XML返回選定的日期爲了XMLElements

這是我XML類的樣子:

@XmlRootElement(name="ArrayOfExchangeRatesTable") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class RootElement { 

    @XmlElement(name="ExchangeRatesTable") 
    private TableRateModel tableRateModel; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class TableRateModel { 

    @XmlElement(name="Table") 
    private String table; 
    @XmlElement(name="EffectiveDate") 
    private Date effectiveDate; 
    @XmlElement(name="Rates") 
    private List<RateModel> rates; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class RateModel { 

    @XmlElement(name="Currency") 
    private Currency currency; 
    @XmlElement(name="Code") 
    private String code; 
    @XmlElement(name="Mid") 
    private Double mid; 

然後我到底印刷,並得到一個結果爲:

RootElement{tableRateModel=TableRateModel{table='A', effectiveDate=Thu Jul 20 00:00:00 CEST 2017, rates=[RateModel{currency=null, code='null', mid=null}]}} 

爲什麼的Rates名單一片空白?

回答

1

問題是XML元素Rate被包裝在名爲Rates的元素中。我測試了以下類和得到它的工作

@XmlRootElement(name = "ArrayOfExchangeRatesTable") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class RootElement { 
    @XmlElement(name = "ExchangeRatesTable") 
    private TableRateModel tableRateModel; 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
class TableRateModel { 
    @XmlElement(name = "Table") 
    private String table; 
    @XmlElement(name = "EffectiveDate") 
    private Date effectiveDate; 
    @XmlElement(name = "Rates") 
    private Rates rates; 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
class Rates { 
    @XmlElement(name = "Rate") 
    private List<Rate> rates; 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
class Rate { 
    @XmlElement(name = "Currency") 
    private String currency; 
    @XmlElement(name = "Code") 
    private String code; 
    @XmlElement(name = "Mid") 
    private Double mid; 
} 

Currency顯然不是序列化,因爲它不具有無參數的構造器。一種解決方法是添加一個返回從字符串解析的Currency吸氣劑:

@XmlAccessorType(XmlAccessType.FIELD) 
class Rate { 
    @XmlElement(name = "Currency") 
    private String currency; 
    @Xml Element(name = "Code") 
    private String code; 
    @XmlElement(name = "Mid") 
    private Double mid; 

    public Currency getCurrency() { 
    return Currency.getInstance(currency); 
    } 
}