繁体   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