通常我一直在使用XML Web服務和使用JAXB進行編組/解組的XML。在這種情況下,我有一個用於生成類的xml模式,然後在運行時我只處理java對象,而不使用xml,因爲解組是在我的封面下完成的。JSON客戶端在Java爲Restful服務
在json中做類似的事情有哪些類型的庫?我必須進行一次http獲取調用,返回一個json對象列表,我不確定我的java客戶端應該是什麼樣子。這裏有什麼最佳實踐?
謝謝。
通常我一直在使用XML Web服務和使用JAXB進行編組/解組的XML。在這種情況下,我有一個用於生成類的xml模式,然後在運行時我只處理java對象,而不使用xml,因爲解組是在我的封面下完成的。JSON客戶端在Java爲Restful服務
在json中做類似的事情有哪些類型的庫?我必須進行一次http獲取調用,返回一個json對象列表,我不確定我的java客戶端應該是什麼樣子。這裏有什麼最佳實踐?
謝謝。
有很多解析JSON的Java庫。最簡單的一個是org.json。如果您已經使用JAXB來解析值對象(POJO's),那麼您還可以看看Jackson使用JAXB註釋來確定您的POJO在JSON中的表示應該看起來像。 (http://jackson.codehaus.org/)
本質上,您需要爲您的JSON創建一個HTTP GET請求,使用JSON解析器解析請求並將它們轉換爲Java中的便捷表示。您可以結合使用Apache Commons HttpClient庫和JSON解析器。
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數據。
如果您需要創建RESTful服務及其客戶端,那麼我寧願rest4j。您可以使用XML來描述您的RESTful服務,並實施您的服務,因爲它是一個普通的Spring bean。然後您可以生成文檔和java/python/php/c#客戶端庫。打包和解組是在引擎蓋下完成的。
還有一種方法可以靈活地將內部Java對象映射到外部JSON表示中,如重命名屬性,僅導出屬性的子集等。