使用来自Java客户端应用程序的JSON Web服务
-
13-10-2019 - |
题
我正在开发一个客户端的Java应用程序,该应用程序具有一些功能,该功能需要从某些Web服务中获取JSON中的数据(有些静止,有些不是)。没有JavaScript,没有Web浏览器,只是一个普通的JAR文件,它将在GUI的秋千上本地运行。
这不是一个新的或独特的问题;当然,必须有一些开源库可以通过HTTP处理JSON数据传输。我已经找到了一些可以解析JSON的方法,但是我很难找到可以处理HTTP通信以消耗JSON Web服务的任何内容。
到目前为止,我发现Apache Axis2显然至少具有解决方案的一部分,但是我看不到足够的文档来知道它是否会做我需要的东西或如何使用它。也许部分问题是我没有Web服务的经验,因此当我看到解决方案时,我无法知道解决方案。我希望你们中的一些人能将我指向正确的方向。示例将有所帮助。
解决方案
apache httpclient 4.0 是业务中最好的,并且非常容易学习。
如果您想更轻松,可以使用 htmlunit 模仿浏览器的行为,因此您可以轻松获取内容(并将其解析为HTML,JavaScript和CSS,您也可以在内容上执行JavaScript代码,以便您可以使用JSON.PARSE.PARSE.PARSE或任何其他等效函数来解析JSON文件)网络上的任何页面。
因此,对于htmlunit,这是一个示例代码:
WebClient wc = new WebClient(BrowserVersion.FIREFOX_3_6);
HtmlPage page = wc.getPage("http://urlhere");
page.executeJavaScript("JS code here");
但这可能是您的要求很重,因此强烈建议使用 httpclient 图书馆。我敢肯定您可以找到许多JSON库的Java,但这是适合您的 JSON-LIB
其他提示
如果您想要比不得不处理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();
没有依赖性。一个小罐子,你很好。
我使用简单的Java Json Libary做到了这一点。使用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"));
如果WebService使用OAuth和访问令牌,则不能使用上述示例。
很高兴看到您的Web服务是宁静的。宁静的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: HTTPConnectionManager
,XMLParser
和 Request
(request
对象)类不是任何标准API。它们是由我自己的帐户编写的,以处理多个Web服务呼叫。此代码片段只是为了给您我的想法。