Java JAX-RS Jersey REST api调用映射

Java JAX-RS Jersey REST api调用映射,java,json,rest,jersey,jax-rs,Java,Json,Rest,Jersey,Jax Rs,我正在尝试在jersey/java中使用Rest服务。 我请求的链接类似于 注意这是一个演示链接 JSON响应如下所示: { "Meta Data": { "1. Information": "Batch Stock Market Quotes", "2. Notes": "IEX Real-Time Price provided for free by IEX (https://iextrading.com/developer/).",

我正在尝试在jersey/java中使用Rest服务。 我请求的链接类似于

注意这是一个演示链接

JSON响应如下所示:

{
    "Meta Data": {
        "1. Information": "Batch Stock Market Quotes",
        "2. Notes": "IEX Real-Time Price provided for free by IEX (https://iextrading.com/developer/).",
        "3. Time Zone": "US/Eastern"
    },
    "Stock Quotes": [
        {
            "1. symbol": "MSFT",
            "2. price": "87.8300",
            "3. volume": "18638820",
            "4. timestamp": "2018-01-10 16:00:00"
        },
        {
            "1. symbol": "FB",
            "2. price": "187.8100",
            "3. volume": "10515752",
            "4. timestamp": "2018-01-10 16:00:00"
        },
        {
            "1. symbol": "AAPL",
            "2. price": "174.2500",
            "3. volume": "23771860",
            "4. timestamp": "2018-01-10 16:00:00"
        }
    ]
}
我的问题是如何在java类中正确地映射它? 这是我试过的

StockREST.java

public class StockREST {
    private String symbol;
    private float price;
    private float volume;
    private String timestamp;

    public String getStockQuotes() {
        return StockQuotes;
    }

    public void setStockQuotes(String StockQuotes) {
        this.StockQuotes = StockQuotes;
    }
   private String StockQuotes;

    public String getSymbol() {
        return symbol;
    }

    public void setSymbol(String symbol) {
        this.symbol = symbol;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public float getVolume() {
        return volume;
    }

    public void setVolume(float volume) {
        this.volume = volume;
    }

    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

     @Override
public String toString() {
    return "Symbol = " + symbol + " price, = "
            + price + ", volume = " + volume + ", timestamp = " + timestamp;
}


}

RESTclient.java

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;

/**
 *
 * @author Me
 */
public class RESTclient {
    public static void main(String[] args) {

    Client client = ClientBuilder.newClient();

StockREST exchange = client.target("https://www.alphavantage.co/query?function=BATCH_STOCK_QUOTES&symbols=MSFT&apikey=B1KLWMIAGSG0UWYD") 

                      .request(MediaType.APPLICATION_JSON)
                      .get(StockREST.class);


 String symbol = exchange.getSymbol();
float price = exchange.getPrice();
float volume = exchange.getVolume();
String timestamp = exchange.getTimestamp();


System.out.println(exchange);


client.close();
}
}
public class RESTclient {
    public static void main(String[] args) {

    Client client = ClientBuilder.newClient();

Response exchange = client.target("https://www.alphavantage.co/query?function=BATCH_STOCK_QUOTES&symbols=MSFT&apikey=B1KLWMIAGSG0UWYD") 

                      .request(MediaType.APPLICATION_JSON)
                      .get(Response.class);


// String symbol = exchange.getSymbol();
MetaData metaData = exchange.getMetaData();
List<StockQuote> stockQuotes = exchange.getStockQuotes();
//float price = exchange.getPrice();
//float volume = exchange.getVolume();
//String timestamp = exchange.getTimestamp();


System.out.println(exchange);


client.close();
}
}
SOUT消息打印出来 Symbol=null价格,=0.0,体积=0.0,时间戳=null

我试过使用数组/列表,但仍然感到困惑。谢谢

编辑

更新的RESTClient.java

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;

/**
 *
 * @author Me
 */
public class RESTclient {
    public static void main(String[] args) {

    Client client = ClientBuilder.newClient();

StockREST exchange = client.target("https://www.alphavantage.co/query?function=BATCH_STOCK_QUOTES&symbols=MSFT&apikey=B1KLWMIAGSG0UWYD") 

                      .request(MediaType.APPLICATION_JSON)
                      .get(StockREST.class);


 String symbol = exchange.getSymbol();
float price = exchange.getPrice();
float volume = exchange.getVolume();
String timestamp = exchange.getTimestamp();


System.out.println(exchange);


client.close();
}
}
public class RESTclient {
    public static void main(String[] args) {

    Client client = ClientBuilder.newClient();

Response exchange = client.target("https://www.alphavantage.co/query?function=BATCH_STOCK_QUOTES&symbols=MSFT&apikey=B1KLWMIAGSG0UWYD") 

                      .request(MediaType.APPLICATION_JSON)
                      .get(Response.class);


// String symbol = exchange.getSymbol();
MetaData metaData = exchange.getMetaData();
List<StockQuote> stockQuotes = exchange.getStockQuotes();
//float price = exchange.getPrice();
//float volume = exchange.getVolume();
//String timestamp = exchange.getTimestamp();


System.out.println(exchange);


client.close();
}
}
公共类RESTclient{
公共静态void main(字符串[]args){
Client Client=ClientBuilder.newClient();
响应交换=客户端。目标(“https://www.alphavantage.co/query?function=BATCH_STOCK_QUOTES&symbols=MSFT&apikey=B1KLWMIAGSG0UWYD") 
.request(MediaType.APPLICATION_JSON)
.get(Response.class);
//String symbol=exchange.getSymbol();
元数据=exchange.getMetaData();
List stockQuotes=exchange.getStockQuotes();
//浮动价格=exchange.getPrice();
//float volume=exchange.getVolume();
//字符串timestamp=exchange.getTimestamp();
系统输出打印项次(交换);
client.close();
}
}

首先,返回的对象不是StockREST,而是一个可以调用Response的组合对象,需要映射到class Response.class

.get(StockREST.class);
变成

.get(Response.class);
然后,必须将无效的java字段名映射到有效的java字段名

“1.symbol”必须映射到对java有效的对象,如“symbol”

下面是针对您的情况使用精确映射的类(省略了getter和setter)

作业做完了,
享受

谢谢您的时间。我添加了这3个类,以及它们的getter和setter。现在我在第一篇文章中更新了我的RESTClient.java。你能告诉我我是否必须做些别的事情来显示输出吗?非常感谢。如果您的意思是使用System.out.println调用显示对象数据,那么您需要像在StockREST中一样为每个对象定义toString()方法。如果不是,您指的是哪种类型的“dispay”?我只想显示symbol/price/volume/timestamp对象。如果你有时间,你能给我举个例子说明怎么做吗?再次感谢。当我尝试Sysout(exchange)或Sysout(stockQuotes)时,它打印空值