当前位置: 首页 > 面试题库 >

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

万俟经纶
2023-03-14
问题内容

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

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

根据我的搜索,步骤是:

  1. 生成Excel .xls(完成)

  2. 写excel流

  3. 在JAX-RS文件中,将响应标头设置为类似的内容,

字符串fileName =“ Blah_Report.xls”; response.setHeader(“ Content-Disposition”,“
attachment; filename =” + fileName);

我的问题是我正在JAX-RS文件中完成所有这些操作,而我没有HttpServletResponse对象可用。

他说:

您可以通过Web服务中的@Context注释注入对实际HttpServletResponse的引用,并使用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
  }
}


 类似资料:
  • 问题内容: 我正在尝试向一些Web服务调用中添加一些响应标头。我使用CXF 2.1.2和JAX- RS编写了Web服务。我需要返回一个对象,我还想向Response添加一些标头。 在不返回javax.ws.rs.core.Response对象的情况下 ,如何在响应中添加标头并仍然返回javabean? 问题答案: 您可以通过Web服务中的@Context注释注入对实际HttpServletResp

  • 问题内容: 我有一个RESTful服务器实现以及一个供客户端进行调用的库,所有这些都使用JAX- RS。服务器组件分为接口和实现。 为了使客户端和服务器库共享RESTful路径和其他定义,我想将接口拆分为自己的项目: 我想在响应中设置一些标题。一种简单的方法是在方法签名中使用: 但是问题在于,这暴露了接口中的实现细节。更具体地说,它突然需要我的REST定义项目(在客户端和服务器库之间共享)来引入依

  • 问题内容: 这是我的代码: 但是,当我从浏览器向服务器发出请求时,出现此错误: 我也尝试过这种方法,在请求之后设置响应头: 没有骰子。我犯了同样的错误。有没有一种方法可以只在route函数中设置响应头?这样的事情将是理想的: 但我还是找不到这样做。请帮忙。 编辑 如果我使用POST请求卷曲URL,如下所示: 我得到这个回应: 有任何想法吗? 问题答案: 你可以很容易地做到这一点: 查看和 但是有些

  • 我试图在JBoss7.2中创建一个JAX-RS示例。我得到如下错误消息。 谢谢和问候,拉姆。

  • 我有一个无服务器API,它与无服务器框架版本1.25一起工作 由于安全原因,我想添加响应头。请帮助我如何通过serverless.yml文件设置下面的标题。出于安全考虑,有必要添加此标题吗? 内容-安全-策略:包括默认-src“自我” •严格的交通安全最大年龄=31536000;包括子域;预载 •X-Content-Type-Options:nosniff •X-XSS-保护:1 •缓存控制:最大

  • 问题内容: 如何使用JAX-RS设置字符集?我试过了,但是被忽略了,只用HTTP标头发送。我想在MessageBodyWriter中设置字符集,但是不想自己通过反射来分析@Produces批注来提取媒体类型。 问题答案: 正如Daemon在评论中指出的那样,JAX-RS的最新版本(包括截至2012年9月的稳定版本)现在 确实 支持该语法。因此,您可以使用: