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

JAX-RS/Jersey 2文件下载-是否有用于服务器和生成的客户端代理的通用API,jersey,jax-rs,swagger,jersey-2.0,jersey-client,Jersey,Jax Rs,Swagger,Jersey 2.0,Jersey Client,我从Swagger自动生成JAX-RS接口。 我使用运动衫2.25.1 对于大多数用例,所有这些都可以正常工作。对于服务器和客户端部件,我们有相同的接口。 客户机是从org.glassfish.jersey.client.proxy.WebResourceFactory的接口生成的 现在我需要通过流媒体实现文件下载(文件会很大,通常在千兆字节范围内,所以需要流媒体) 我可以为服务器使用以下签名: @GET @Path("/DownloadFile") @Produces({"applicatio

我从Swagger自动生成JAX-RS接口。 我使用运动衫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
对象作为返回类型的工作解决方案:

服务器代码:

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生成的客户端。在客户端代码中,您必须将响应实体作为输入流读取-
InputStream responseStream=response.readEntity(InputStream.class)
然后读取此流以获取实际的文件内容。尝试使用响应返回类型,然后在客户端代码中,可以调用
Response.get(InputStream.class)