我对在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)如果此rest调用返回的是JSON对象,那么是否会因为转到String而搞砸了?
2)解析返回的JSON的最佳方法是什么?
3)我不太确定如何格式化查询字段.我假设应该在REST API中进行记录?
提前致谢.
解决方法:
REST是一种应用在HTTP之上的模式.根据您的问题,在我看来,您首先需要了解HTTP(通常是chatty套接字协议)的工作方式以及Java API提供的处理方法.
您可以使用那里的任何Json库来解析HTTP响应主体(假设它是200 OK,您需要检查并还要注意HTTP重定向!),但这不是通常构建内容的方式.
如果该服务公开了真正的RESTful接口(与更简单的HTTP JSON相反),则需要使用四个HTTP动词,而URLConnection则不允许这样做.另外,您可能希望添加用于身份验证的标头,或者可能是cookie(实际上只是HTTP标头,但仍然值得单独考虑).因此,我的建议是使用Apache Commons的HttpClient或某些带有客户端支持的JAX-RS库(例如Apache CXF)来构建服务的客户端部分.这样,您将完全控制通信,同时还可以使用更好的抽象,而不必使用URLConnection提供的InputStream和手动序列化/反序列化参数/响应.
关于如何设置查询字段的格式,再次您首先需要掌握HTTP的基础知识.无论如何,确定的答案取决于远程服务的实现,但是您将面临四个选择:
>服务URL中的查询字符串
> HTTP请求的表单编码主体
> HTTP请求的主体(类似于前者,但不同的MIME类型足以使您头痛)-通常在也有网站的HTTP JSON服务中使用,并且可以使用相同的URL进行上传包含文件输入的表单
> HTTP主体的服务定义的编码(例如application / json或application / xml)(同样,它与前两点确实相同,但是不同的MIME编码意味着您必须使用不同的API)
标签:rest,json,java
来源: https://codeday.me/bug/20191029/1958232.html