javax.ws.rs.client.WebTarget POST并同时获得响应

时间:2018-09-11 17:39:28

标签: java jax-rs jersey-client

我有一个rest API,该API提供了POST方法,该方法可以转换输入数据并将其作为输出流化(也对输入流进行流化处理,以便我们可以传输大量数据)。

使用curl,与发布这样的数据相比,我可以在同一时间处理响应:

curl -uadmin -X POST "http://XXXX:8080/process" -H  "Content-Type: application/octet-stream" --data-binary @myFile.csv > output.csv
Enter host password for user 'admin':
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0 5868M    0 14826    0  106k   3627  26777 63:50:21  0:00:04 63:50:17 31293

如您所见,curl可以在发送数据时接收。

我的问题是我想使用Java(执行Apache Spark作业)来实现相同的目的,但是无法使其正常工作。当我使用程序时,程序被阻止并且无法获取Response对象:

Response response = (javax.ws.rs.client.WebTarget)target.request().post(Entity.entity(is, MediaType.APPLICATION_OCTET_STREAM))

有人可以帮我解决吗? (在下面,Java使用jersey-client 2.22.2)

1 个答案:

答案 0 :(得分:0)

我终于找到了一个不错的库:async-http-client。只需使用org.asynchttpclient.handler.TransferCompletionHandler功能。