[英]REST call in Java
关于我在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中记录?
提前致谢。
REST是一种应用于HTTP之上的模式。 从您的问题来看,在我看来,您首先需要了解HTTP(以及一般的繁琐的套接字协议)如何工作以及Java API为处理它提供了什么。
您可以使用任何Json库来解析HTTP响应主体(假设它是200 OK,您需要检查,并注意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 ) 天啊。 您可以在以下几个方面改进此代码。 我甚至都没有指出错误,因为我希望你用HTTP客户端库替换HTTP调用。 我也不知道你的API所需的规范,所以让你在这个抽象级别正确使用POST或GET方法将需要更多的工作。
1)如果这个休息调用返回一个JSON对象,是否会因为转到String而搞砸了?
不,但将json打成一个对象就是你的工作。 像google gson这样的图书馆可以提供帮助。
2)解析返回的JSON的最佳方法是什么?
我喜欢像上面提到的那样使用gson,但你可以使用另一个marshal / unmarhal库。
3)我真的不确定如何格式化查询字段。 我假设应该在REST API中记录?
是。 查看文档并提出镜像json结构的java对象。 然后,您可以使用以下代码解析它们。
gson.fromJson(json, MyStructure.class);
请看一下使用像apache HTTP客户端这样的库来编写HTTP客户端 ,这将使您的工作变得更加容易。
由于您似乎对此不熟悉,我还建议您查看Postman等工具,如果您怀疑您编写的代码有问题,可以帮助您测试API调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.