2010-08-03 115 views
0

通常我一直在使用XML Web服務和使用JAXB進行編組/解組的XML。在這種情況下,我有一個用於生成類的xml模式,然後在運行時我只處理java對象,而不使用xml,因爲解組是在我的封面下完成的。JSON客戶端在Java爲Restful服務

在json中做類似的事情有哪些類型的庫?我必須進行一次http獲取調用,返回一個json對象列表,我不確定我的java客戶端應該是什麼樣子。這裏有什麼最佳實踐?

謝謝。

回答

1

有很多解析JSON的Java庫。最簡單的一個是org.json。如果您已經使用JAXB來解析值對象(PO​​JO's),那麼您還可以看看Jackson使用JAXB註釋來確定您的POJO在JSON中的表示應該看起來像。 (http://jackson.codehaus.org/

本質上,您需要爲您的JSON創建一個HTTP GET請求,使用JSON解析器解析請求並將它們轉換爲Java中的便捷表示。您可以結合使用Apache Commons HttpClient庫和JSON解析器。

1
String url = "www.abc.com/products/1"; // 1 = product number 
DefaultHttpClient client = new DefaultHttpClient(); 
HttpGet request = new HttpGet(url); 
request.addHeader("User-Agent", USER_AGENT); 
request.addHeader(BasicScheme.authenticate(
new UsernamePasswordCredentials("username", "password"), "UTF-8", false)); 
HttpResponse response = client.execute(request); 
System.out.println("Response Code : " + response.getStatusLine().getStatusCode()); 
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
data = new String(rd.readLine()); 

現在您必須創建JSON庫的對象來解析數據或獲取特定數據。

try { 
     obj = new JSONObject(data); 
     System.out.println("Final Data" + data); 
     String category = obj.getString("product"); 
     System.out.println("category " + category); 
} 
} catch (JSONException ex) { 
     System.out.println(ex); 
    } 

使用org.codehaus.jettison.json庫來處理JSON數據。

0

如果您需要創建RESTful服務及其客戶端,那麼我寧願rest4j。您可以使用XML來描述您的RESTful服務,並實施您的服務,因爲它是一個普通的Spring bean。然後您可以生成文檔和java/python/php/c#客戶端庫。打包和解組是在引擎蓋下完成的。

還有一種方法可以靈活地將內部Java對象映射到外部JSON表示中,如重命名屬性,僅導出屬性的子集等。