我编写了使用 REST JAX-RS 生成 Excel 文件的代码,并确认生成的 Excel 文件位于 GlassFish 服务器目录中。
但我的目标是,当用户单击按钮(生成 Excel .xls)时,我希望显示下载弹出窗口,询问用户是否保存或打开 .xls 文件,就像用于下载任何类型文件的任何其他 Web 服务一样。
根据我的搜索,步骤是:
生成 Excel .xls(完成)
将 Excel 写入流
-
在 JAX-RS 文件中,将响应标头设置为类似以下内容:
字符串文件名 = "Blah_Report.xls";
response.setHeader("Content-Disposition", "附件; filename=" + fileName);
我的问题是我正在 JAX-RS 文件中执行所有这些操作,但没有可用的 HttpServletResponse 对象。
根据来自的回答将响应标头添加到 JAX-RS Web 服务 https://stackoverflow.com/questions/1493415/add-response-header-to-jax-rs-webservice
He says:
您可以注入对
实际的 HttpServletResponse 通过
Web 服务中的 @Context 注释
并使用 addHeader() 等添加您的
标头。
如果没有示例代码,我真的无法弄清楚这到底意味着什么。
您不需要 HttpServletResponse 在响应上设置标头。你可以使用
javax.ws.rs.core.Response。只需让您的方法返回 Response 而不是实体:
return Response.ok(entity).header("Content-Disposition", "attachment; filename=\"" + fileName + "\"").build()
如果您仍然想使用 HttpServletResponse,您可以将其注入到类字段之一,或者使用属性,或者方法参数:
@Path("/resource")
class MyResource {
// one way to get HttpServletResponse
@Context
private HttpServletResponse anotherServletResponse;
// another way
Response myMethod(@Context HttpServletResponse servletResponse) {
// ... code
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)