【问题标题】:Using a JSON web service from a Java client application从 Java 客户端应用程序使用 JSON Web 服务
【发布时间】:2011-05-30 23:44:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: java web-services json axis2 java-client


    【解决方案1】:

    Apache HttpClient 4.0 是业内最好的,并且比较容易学习。

    如果您想要更轻松,您可以使用 HtmlUnit 模仿浏览器的行为,以便您可以轻松获取内容(并将其解析为 Html、javascript 和 css,您还可以在内容上执行 javascript 代码,以便您可以解析JSON 文件以使用 Web 上任何页面的 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

    【讨论】:

    • 谢谢,我去看看。我已经控制了 JSON 解析(应用程序还读取和解析本地 JSON 文件)。这是我试图在不重新发明轮子的情况下解决的 HTTP 通信并从中提取 JSON。
    • 那么 HttpClient 库最适合你。
    【解决方案2】:

    我使用一个简单的 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 和访问令牌,则您不能使用上述示例。

    【讨论】:

      【解决方案3】:

      很高兴看到您的 Web 服务是 RESTful。 RESTful Web 服务非常易于开发和使用。嗯...您无需额外注意通过网络传输 JSON 数据...无论是 JSON 格式还是 XML 格式的数据都嵌入到 HTTP 标头中..以下代码 sn-p 将帮助您理解这个想法:

      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,可用的 Here,从 JSON 表示法中提取数据。

      希望代码对你有所帮助...

      PS:HTTPConnectionManager、XMLParser 和 Request(request object) 类不是任何标准 API。它们是由我自己的帐户编写的,用于处理多个 Web 服务调用。这段代码 sn-p 只是给你我的想法。

      【讨论】:

      • 不幸的是,一些 Web 服务是外部的且非 RESTful。我以前写过网页和 servlet,所以我熟悉 GET 和 POST 的概念,而且提供 Web 服务的 RESTful 方法似乎更容易掌握。但是当它是非 RESTful 时,JSON 或 XML 结果去哪里了?如果 HTML 页面返回 HTML,则在 HTML 页面正文所在的位置?
      • 是的 JSON 或 XML 数据被嵌入到 HTTP 标头中......它占据的位置与 HTML 代码在 HTTP 标头中占据的位置相同。事实上,通过 HTTP 传输的每个数据都保留在同一个位置。
      猜你喜欢
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      相关资源
      最近更新 更多