我编写了使用 REST JAX-RS 生成 Excel 文件的代码,并确认生成的 Excel 文件位于 GlassFish 服务器目录中。
但我的目标是当用户单击按钮(生成 Excel .xls)时,我希望显示下载弹出窗口,询问用户是保存还是打开 .xls 文件,就像任何其他用于下载任何类型的 Web 服务一样文件。
根据我的搜索,步骤是:
生成 Excel .xls(完成)
将excel写入流
在 JAX-RS 文件中,将响应头设置为类似,
字符串文件名 = "Blah_Report.xls"; response.setHeader("Content-Disposition", "attachment; filename="+ fileName);
我的问题是我在 JAX-RS 文件中执行所有这些操作,但我没有可用的 HttpServletResponse 对象。
根据来自的回答 Add Response Header to JAX-RS Webservice
他说:
You can inject a reference to the actual HttpServletResponse via the @Context annotation in your webservice and use addHeader() etc. to add your header.
如果没有示例代码,我真的无法弄清楚这到底意味着什么..
最佳答案
您不需要 HttpServletResponse 在响应上设置 header 。您可以使用 javax.ws.rs.core.Response。只需让您的方法返回响应而不是实体:
return Response.ok(entity).header("Content-Disposition", "attachment; filename=\"" + fileName + "\"").build()
如果您仍想使用 HttpServletResponse,您可以将其注入(inject)到类字段之一,或使用属性或方法参数:
@Path("/resource")
class MyResource {
// one way to get HttpServletResponse
@Context
private HttpServletResponse anotherServletResponse;
// another way
Response myMethod(@Context HttpServletResponse servletResponse) {
// ... code
}
}
关于java - 如何在 JAX-RS 中设置响应 header ,以便用户看到 Excel 的下载弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621748/