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

JAX-RS/Jersey 2 file download - Is there a common API for server and generated client proxy

我从 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,我想要一个类似的下载解决方案...

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

服务器代码:

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 生成的客户端。