2010-08-03 118 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表示中,如重命名属性,仅导出属性的子集等。