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

在实现中设置JAX-RS响应标头,而无需在接口中暴露HttpServletResponse

鱼阳伯
2023-03-14
问题内容

我有一个RESTful服务器实现以及一个供客户端进行调用的库,所有这些都使用JAX-
RS。服务器组件分为接口FooResource和实现FooResourceService

为了使客户端和服务器库共享RESTful路径和其他定义,我想将FooResource接口拆分为自己的项目:

@Path(value = "foo")
public interface FooResource {

  @GET
  public Bar getBar(@PathParam(value = "{id}") int id) {

我想在响应中设置一些标题。一种简单的方法是@Context HttpServletResponse在方法签名中使用:

  public Bar getBar(@PathParam(value = "{id}") int id, @Context HttpServletResponse servletResponse) {

但是问题在于,这暴露了接口中的实现细节。更具体地说,它突然需要我的REST定义项目(在客户端和服务器库之间共享)来引入javax.servlet- api依赖项-客户端不需要(或不需要)某些东西。

我的RESTful资源服务实现如何设置HTTP响应标头而不在资源接口中引入依赖关系?

我看到一篇推荐我将HttpServletResponse作为类成员注入的帖子。但是,如果我的资源服务实现是单例的,这将如何工作?它是否使用某种带有线程局部变量的代理,或者即使多个线程同时使用singleton类,也能找出正确的servlet响应的代理?还有其他解决方案吗?


问题答案:

正确的答案似乎是HttpServletResponse在实现的成员变量中注入,正如我指出的另一篇文章所指出的那样。

@Context  //injected response proxy supporting multiple threads
private HttpServletResponse servletResponse;

即使peeskillet指出Jersey的半官方列表未列出HttpServletResponse为可代理类型之一,但当我跟踪代码时,至少RESTEasy似乎正在创建代理(org.jboss.resteasy.core.ContextParameterInjector$GenericDelegatingProxy@xxxxxxxx)。据我所知,似乎正在发生单例成员变量的线程安全注入。



 类似资料:
  • 问题内容: 我编写了使用REST JAX-RS生成Excel文件的代码,并确认生成的Excel文件在GlassFish服务器目录中。 但是我的目标是当用户单击按钮(生成Excel .xls)时,我要显示下载弹出窗口,询问用户是否要保存或打开.xls文件,就像其他任何下载任何类型文件的Web服务一样。 根据我的搜索,步骤是: 生成Excel .xls(完成) 写excel流 在JAX-RS文件中,将

  • 我正在使用泽西创建RESTful API资源,并使用生成响应。 RESTful资源的示例代码: 在响应中,它在响应头中返回分块传输编码。在“Jersey world”中,让它返回内容长度标题而不是响应标题中的传输编码:分块标题的正确方式是什么?

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

  • 我正在尝试用Docker和Selenium Grid建立一个自动化测试平台。在下图中,你可以看到我使用的结构。最上面是运行在计算引擎上的ubuntu服务器。左边是一个运行ubuntu 14.04的docker容器。该容器使用Google App Engine在localhost:8080上运行我们的项目。右边是Selenium集线器,有两个节点在端口4444上运行。 Docker和Selenium

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

  • 如何在nodejs中发送文件,我正在创建一个页面应用程序,所以我只想abcd.html页面首次按要求交付,这是我的代码 app.js 对页面的响应 发送后,它总是给出无法设置的标题,下面是控制台输出 错误:SendStream禁止。SendStream出错(/home/pitu/CODING/NODE-PROJECTS/chichat/NODE\u modules/express/NODE\u m