Siv*_*a R 5 rest cxf jakarta-ee
@GET
@Path("/{id}/content")
@Produces({ "application/octet-stream" })
public Response getDocumentContentById(@PathParam("id") String docId) {
InputStream is = getDocumentStream(); // some method which gives stream
ResponseBuilder responseBuilder = Response.ok(is);
responseBuilder.header("Content-Disposition", "attachment; filename=" + fileName);
return responseBuilder.build();
}
Run Code Online (Sandbox Code Playgroud)
这里我如何关闭 InputStream 是?如果某物(jax.rs)自动关闭。请给我一些信息。谢谢你。
当您想要流式传输自定义响应时,我发现的最可靠的方法是返回一个包含InputStream(或可以在某个时候以其他方式获取流)的对象,并定义一个MessageBodyWriter提供者在正确的时间进行实际的流式传输。
例如,此代码是 Apache Taverna 的一部分,它流回目录的压缩内容。使用它的主代码所需要做的就是返回 aZipStream作为响应(可以将其打包在 a 中Response,也可以不打包),并确保它正在处理返回application/zip内容类型。最后要注意的一点是,由于这是与 CXF 打交道,因此您需要手动注册提供程序;与 Glassfish 不同,它们不会自动被拾取。在复杂的场景中这是一件好事,但这确实意味着您需要进行注册。
| 归档时间: |
|
| 查看次数: |
2121 次 |
| 最近记录: |