[英]Retrieve JSON from Rest Client Request trough Service To Web Application
[英]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: HTTPConnectionManager
, XMLParser
和Request
( request
對象)類不是任何標准API。 它們由我自己的帳戶編寫,用於處理多個Web服務調用。 這段代碼只是為了給你我的想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.