使用外部API(REST)上的Get方法读取列表(java)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用外部API(REST)上的Get方法读取列表(java)相关的知识,希望对你有一定的参考价值。

我试图学习如何使用Jersey消费REST Web服务。我使用get请求来查看来自URI“https://api.fixer.io/latest”的数据,这个URI显示了一个基数,日期,我相信一个数组/ ArrayList。在我下面的课程中,我设法显示资源的日期和基础。但是我在显示项目列表时遇到问题。当我运行我的代码时,它给出了:

日期= 2017-12-15,基数= EURlist = []

我正在寻找的一个例子是:

日期= 2017-12-15,基数=欧元列表= [澳元“:1.5382,”BGN“:1.9558(等)]

这是我的代码:restServiceClient.java

import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.xml.ws.Response;

public class restServiceClient{


public static void main(String[] args) {

    Client client = ClientBuilder.newClient();
Exchange exchange = client.target("https://api.fixer.io/latest")
                      .request(MediaType.APPLICATION_XML)
                      .get(Exchange.class);


String base = exchange.getBase();
String date = exchange.getDate();
ArrayList<String> theList = exchange.getRates();

//String[] excArray = theList.toArray();
System.out.print(exchange);

client.close() ;
}

}

Exchange.Java

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Admin
 */
public class Exchange {
    private String base;
    private String date;
    private ArrayList<String> rates;

    public ArrayList<String> getRates() {
        return rates;
    }

    public void setRates(ArrayList<String> rates) {
        this.rates = rates;
    }

    public void setBase(String base) {
        this.base = base;
    }

    public void setDate(String date) {
        this.date = date;
    }



    public String getBase() {
        return base;
    }

    public String getDate() {
        return date;
    }



  @Override
public String toString() {
    return "Date = " + date + ", base = "
            + base + " list = " + rates;
}

}
答案

首先,在接口上编程(List,而不是ArrayList)。

其次,看看https://api.fixer.io/latest的回应。它是JSON,而不是XML。所以不要请求XML。

第三,如您所见,费率不是字符串列表。它是一个对象数组,其键为String类型,值为number。这通常由JSON映射器映射为Map<String, Double>,而不是ArrayList<String>

以上是关于使用外部API(REST)上的Get方法读取列表(java)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 REST API 从子集中删除项目

Firebase Rest Api 从我的模型类中读取数据返回 null [重复]

列表的各个资源上的 REST API 和 ETag

Yammer REST API:如何获取外部网络的访问令牌?

CORS 预检返回 200,但随后的 PUT 从未发生(带有外部 REST API 的 Angular JS)

使用 C# 从外部 api 读取 json 数据