java 中rest,Java中的REST调用

我对在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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值