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

javax.ws.rs.client.WebTarget POST and get Response in the same time

我休息一下 API,它提供了一个 POST 方法来转换输入数据并将其流式传输为输出(输入也被流式传输,因此我们可以传输大量数据)。

使用 curl,我能够在处理响应的同时处理 post 这样的数据:

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 = (javax.ws.rs.client.WebTarget)target.request().post(Entity.entity(is, MediaType.APPLICATION_OCTET_STREAM))

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

终于找到好库了:async-http-client。只需使用 org.asynchttpclient.handler.TransferCompletionHandler 功能。