JAX-RS / Jersey 2文件下载 - 服务器和生成的客户端代理是否有通用API

时间:2017-10-11 13:27:00

标签: jersey jax-rs swagger jersey-2.0 jersey-client

我从Swagger自动生成JAX-RS接口。 我使用Jersey 2.25.1。

对于大多数用例,一切正常。我们为服务器和客户端部件提供相同的接口。 客户端是使用org.glassfish.jersey.client.proxy.WebResourceFactory

的界面生成的

现在我需要通过流媒体实现文件下载(文件很大,通常在千兆字节范围内,因此需要流式传输)。

我可以为服务器使用以下签名:

@GET
@Path("/DownloadFile")
@Produces({"application/octet-stream"})
StreamingOutput downloadFileUniqueId();

StreamingOutput显然无法在客户端使用。

JAX-RS / Jersey中是否有任何功能在服务器和客户端之间建立通用接口?

我已经看过上传了,可以使用FormDataMultiPart,我想要一个类似的下载解决方案...

1 个答案:

答案 0 :(得分:1)

好的,找到了一个使用javax.ws.rs.core.Response对象作为返回类型的工作解决方案:

服务器代码:

public Response downloadFile(String uniqueId){
    InputStream inputStream = filePersistenceService.read(uniqueId);
    Response.ok(outputStream -> IOUtils.copy(inputStream, outputStream)).build()

}

客户代码:

Response response = client.downloadFile(uniqueId);
InputStream resultInputStream = response.readEntity(InputStream.class);

这适用于org.glassfish.jersey.client.proxy.WebResourceFactory生成的客户端。