在外部 API (REST)(java) 上使用 Get 方法读取列表
reading a list using Get method on external API (REST)(java)
我正在尝试学习如何使用 Jersey 使用 REST 网络服务。我正在使用获取请求查看来自 URI“https://api.fixer.io/latest”的数据,此 URI 显示一个基准、日期,我相信 array/ArrayList。在下面的 class 中,我设法显示了资源的日期和基础。但是我无法显示项目列表。当我 运行 我的代码时,它给出了这个:
日期 = 2017-12-15,基准 = EURlist = []
我正在寻找的示例是:
日期 = 2017-12-15,基础 = 欧元列表 = [AUD":1.5382,"BGN":1.9558 (etc)]
这是我的代码:
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。
第三,如您所见,rates 不是字符串列表。它是一个对象数组,键类型为 String,值类型为 number。这通常会被 JSON 映射器映射为 Map<String, Double>
,而不是 ArrayList<String>
.
我正在尝试学习如何使用 Jersey 使用 REST 网络服务。我正在使用获取请求查看来自 URI“https://api.fixer.io/latest”的数据,此 URI 显示一个基准、日期,我相信 array/ArrayList。在下面的 class 中,我设法显示了资源的日期和基础。但是我无法显示项目列表。当我 运行 我的代码时,它给出了这个:
日期 = 2017-12-15,基准 = EURlist = []
我正在寻找的示例是:
日期 = 2017-12-15,基础 = 欧元列表 = [AUD":1.5382,"BGN":1.9558 (etc)]
这是我的代码: 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。
第三,如您所见,rates 不是字符串列表。它是一个对象数组,键类型为 String,值类型为 number。这通常会被 JSON 映射器映射为 Map<String, Double>
,而不是 ArrayList<String>
.