java - 如何在 JAX-RS 中设置响应 header ,以便用户看到 Excel 的下载弹出窗口?

标签 java rest header jax-rs glassfish-3

我编写了使用 REST JAX-RS 生成 Excel 文件的代码,并确认生成的 Excel 文件位于 GlassFish 服务器目录中。

但我的目标是当用户单击按钮(生成 Excel .xls)时,我希望显示下载弹出窗口,询问用户是保存还是打开 .xls 文件,就像任何其他用于下载任何类型的 Web 服务一样文件。

根据我的搜索,步骤是:

  1. 生成 Excel .xls(完成)

  2. 将excel写入流

  3. 在 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/

相关文章:

angular - 如何在 Angular 2 中将 header 设置为 application/json

java - Guice ServeContextListener 没有启动

java 将小时添加到系统日期并采用 yyyyMMddHHmmss 格式

java - 使用同一库的 2 个版本

java - Alfresco activi 5.* 或 6.* 中的自定义 Rest API

html - 如何卡住页面的标题

http - 通过 header 检查计算机是否被黑客入侵

java - 输入 在输入前添加一行文字

javascript - 我想通过从网站获取 API 来直接显示 map ,而不使用任何 JS 库

rest - SharePoint 本地 2013 REST 身份验证