3

我正在开发一个客户端 Java 应用程序,该应用程序具有一些功能,需要从一些以 JSON 传输的 Web 服务获取数据(有些是 RESTful,有些不是)。没有 JavaScript,没有 Web 浏览器,只是一个普通的 JAR 文件,它将使用 Swing for GUI 在本地运行。

这不是一个新的或独特的问题。肯定有一些开源库可以处理通过 HTTP 传输的 JSON 数据。我已经找到了一些可以解析 JSON 的方法,但是我找不到任何可以处理 HTTP 通信以使用 JSON Web 服务的方法。

到目前为止,我发现 Apache Axis2 显然可能至少有部分解决方案,但我没有看到足够的文档来了解它是否会满足我的需要,或者如何使用它。也许问题的一部分是我没有使用 Web 服务的经验,所以当我看到它时我无法知道解决方案。我希望你们中的一些人能指出我正确的方向。例子会很有帮助。

4

3 回答 3

4

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

于 2010-12-27T02:13:49.523 回答
1

我使用一个简单的 Java JSON 库来做到这一点。使用谷歌图书馆..

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 和访问令牌,则您不能使用上面的示例。

于 2014-01-25T02:27:41.480 回答
0

很高兴看到您的 Web 服务是 RESTful。RESTful Web 服务非常易于开发和使用。嗯...您无需额外注意通过网络传输 JSON 数据...无论是 JSON 格式还是 XML 格式的数据都嵌入到 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 APIs,available Here,从 JSON 表示法中提取数据。

希望代码能帮到你...

PS:HTTPConnectionManagerXMLParser( Requestobject request) 类不是任何标准 API。它们是由我自己的帐户编写的,用于处理多个 Web 服务调用。这个代码片段只是为了给你我的想法。

于 2010-12-27T04:46:29.647 回答