关于我在JAVA中制作的特定REST调用,我有几个问题。我是新手,所以我从几个来源拼凑了这个。电话本身看起来像这样:
String src = AaRestCall.subTrackingNum(trackingNum);
Rest调用类看起来像这样:
public class AaRestCall {
public static String subTrackingNum (Sting trackingNum) throws IOException {
URL url = new URL("https://.../rest/" + trackingNum);
String query = "{'TRACKINGNUM': trackingNum}";
//make connection
URLConnection urlc = url.openConnection();
//use post mode
urlc.setDoOutput(true);
urlc.setAllowUserInteraction(false);
//send query
PrintStream ps = new PrintStream(urlc.getOutputStream());
ps.print(query);
ps.close();
//get result
BufferedReader br = new BufferedReader(new InputStreamReader(urlc
.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line=br.readLine())!=null) {
sb.append(line);
}
br.close();
return sb.toString();
}
}
现在,我总体上对这个问题有一些疑问。
1)如果这个休息调用返回一个JSON对象,是否会因为转到String而搞砸了?
2)解析返回的JSON的最佳方法是什么?
3)我不确定如何格式化查询字段。我认为应该在REST API中记录?
提前致谢。
答案 0 :(得分:2)
REST是一种应用于HTTP之上的模式。从您的问题来看,在我看来,您首先需要了解HTTP(以及一般的繁琐的套接字协议)如何工作以及Java API为处理它提供了什么。
你可以使用那里的任何Json库来解析HTTP响应主体(前提是它已经200,你需要检查,并注意HTTP重定向!),但它是而不是通常如何建造。
如果该服务公开了一个真正的RESTful接口(与更简单的HTTP + JSON相对),那么您需要使用四个HTTP动词,而URLConnection并不允许您这样做。另外,您可能希望添加用于身份验证的标头,或者可能是Cookie(实际上只是HTTP标头,但仍然需要单独考虑)。所以我的建议是使用来自Apache commons的HttpClient构建服务的客户端部分,或者可能是一些带有客户端支持的JAX-RS库(例如Apache CXF)。通过这种方式,您可以完全控制通信,同时获得更好的抽象,而不是使用URLConnection提供的InputStream并手动序列化/反序列化参数/响应。
关于如何格式化查询字段,您首先需要掌握HTTP的基础知识。无论如何,明确的答案取决于远程服务的实现,但您将面临四个选择:
file
输入application/json
或application/xml
)编码(同样,它与前两个点完全相同,但不同的MIME编码表示您必须使用不同的API)答案 1 :(得分:1)
哦,我的。您可以在以下几个方面改进此代码。我甚至都没有指出错误,因为我希望你用HTTP客户端库替换HTTP调用。我也没有意识到你的API所需的规范,所以让你在这个抽象级别正确使用POST或GET方法将需要更多的工作。
1)如果这个休息调用正在返回一个JSON对象,那是否会得到 通过去一个字符串搞砸了?
不,但将json打成一个对象是你的工作。像google gson这样的图书馆可以提供帮助。
2)解析返回的JSON的最佳方法是什么?
我喜欢像上面提到的那样使用gson,但你可以使用另一个marshal / unmarhal库。
3)我真的不确定如何格式化查询字段。我假设 应该在REST API中记录?
是。查看文档并提出镜像json结构的java对象。然后,您可以使用以下代码解析它们。
gson.fromJson(json, MyStructure.class);
请使用像apache HTTP client这样的库来编写HTTP客户端,这将使您的工作变得更加轻松。
由于您似乎对此不熟悉,我还建议您查看Postman之类的工具,如果您怀疑自己编写的代码有问题,可以帮助您测试API调用
答案 2 :(得分:1)
我认为你应该使用REST client library而不是自己编写,除非是出于教育目的 - 然后一定要疯了!
REST服务将使用HTTP response响应您的呼叫,有效负载可能也可能不会格式化为JSON string。如果是,我建议您使用JSON parsing library将该String转换为Java表示。
是的,您将不得不求助于特定的REST API:s文档以获取详细信息。
P.S。 java URL类已损坏,请改用URI。