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