簡體   English   中英

使用Java客戶端應用程序中的JSON Web服務

[英]Using a JSON web service from a Java client application

我正在開發一個客戶端Java應用程序,它具有一些功能,需要從一些以JSON傳輸的Web服務中獲取數據(一些是RESTful,一些不是)。 沒有JavaScript,沒有Web瀏覽器,只是一個普通的JAR文件,它將使用Swing為GUI本地運行。

這不是一個新的或獨特的問題; 肯定有一些開源庫可以通過HTTP處理JSON數據傳輸。 我已經找到了一些將解析JSON,但我找不到任何能夠處理HTTP通信來使用JSON Web服務的東西。

到目前為止,我發現Apache Axis2顯然可能至少有部分解決方案,但我沒有看到足夠的文檔知道它是否能滿足我的需要,或者如何使用它。 也許問題的一部分是我沒有Web服務的經驗,所以當我看到它時,我無法知道解決方案。 我希望你們中的一些人能指出我正確的方向。 例子會有所幫助。

如果您想要比處理URLConnection更舒適一點,請查看Resty for Java。 簡單,重量輕,但仍然很新。

http://beders.github.com/Resty

以下是JSON的示例:

Resty r = new Resty();
String name = r.json("http://ws.geonames.org/postalCodeLookupJSON?"+
    "postalcode=66780&country=DE").get("postalcodes[0].placeName").toString();

沒有依賴。 一個小JAR,你很高興。

Apache HttpClient 4.0是業界最好的,並且中等易學。

如果你想要更容易,你可以使用模仿瀏覽器行為的HtmlUnit ,這樣你就可以輕松獲取內容(並將其解析為Html,javascript和css,你也可以在內容上執行javascript代碼,這樣你就可以解析JSON文件到使用JSON網頁上任何頁面的.parse或任何其他等效函數)。

所以對於HtmlUnit這里是一個示例代碼:

WebClient wc = new WebClient(BrowserVersion.FIREFOX_3_6);
HtmlPage page = wc.getPage("http://urlhere");
page.executeJavaScript("JS code here");

但它可能相當重,因此強烈建議使用HttpClient庫。 我相信你可以找到很多java的JSON庫,但這里有一個json-lib

我使用一個簡單的Java JSON庫來完成它。 使用Google庫..

URL url = new URL("http://www.siteconsortium.com/services/hello.php");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

JSONParser parser=new JSONParser();
Object object = parser.parse(in);

JSONArray array = (JSONArray) object;        
JSONObject object2 = (JSONObject)array.get(0);
System.out.println(object2.get("hello")); 

如果Web服務使用OAuth和訪問令牌,則您無法使用上述示例。

很高興看到您的Web服務是RESTful。 RESTful Web服務很容易開發和使用。很好......你不需要特別小心通過網絡傳輸JSON數據......數據是否以XML格式的JSON格式嵌入到HTTP頭中..以下代碼片段將幫助您理解這個想法:

httpConnection = new HTTPConnectionManager(request);
HttpURLConnection httpURLConnection = httpConnection.connect();
int responseCode = httpURLConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
    in = httpURLConnection.getInputStream();
    int x;
    StringBuilder stringBuilder = new StringBuilder();
    while ((x = in.read()) != -1) {
        stringBuilder.append((char) x);
    }
    XMLParser xmParser = new XMLParser();
    ....
    ....
}

在這段代碼中,我從Web服務接收XML格式的數據。在將數據接收到StringBuilder對象后,我正在解析XML。 以同樣的方式,您可以使用此代碼調用Web服務,並可以接收您的JSON數據。 您可以使用javaJSON API(可在此處)從JSON表示法中提取數據。

希望代碼會幫助你......

PS: HTTPConnectionManagerXMLParserRequestrequest對象)類不是任何標准API。 它們由我自己的帳戶編寫,用於處理多個Web服務調用。 這段代碼只是為了給你我的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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