什么是@javax.ws.rs.core.Context?

9

首先,我非常新手,不确定这是否是一个非常基本的问题。但我还是来发布了。

我正在查看一个使用restful webservice的代码。为了向该ws提供详细信息,正在进行ajax调用。方法签名如下:

@Path("/issues")
@GET
public Response getIssueCockpit(@javax.ws.rs.core.Context HttpServletRequest paramHttpServletRequest, @QueryParam("filterGlobal") String paramString) throws Exception 
{ 
    //Code here
}

我明白webservice调用者是使用"例如: http://app/resource/issues1" 调用这个API的,并且这个方法被调用了。

  1. 请问在下面的方法调用中,@javax.ws.rs.core.Context HttpServletRequest paramHttpServletRequest是什么意思?
  2. 在这种情况下,这个注释是做什么用的?
  3. 正在进行一个ajax调用以向WS提供详细信息。如何在ServletRequest中保留上下文?

谢谢帮助

2个回答

6
HttpServletRequest对象表示来自浏览器或客户端应用程序的HTTP请求。因此,对"http://app/resource/issues1"的调用由HttpServletRequest实例表示。此对象具有报告有关请求的信息的方法,例如Http标头、媒体类型和请求正文。
注释@Context(与Spring的@Autowired和Java EE的@Inject类似)为使用HTTP方法类型(GET)在路径(/issue)上发出的请求注入HttpServletRequest实例。实际上,@Context注释可以注入与请求相关的大量非常有用的对象。请参见下面的完整列表:

ServletRequest的生存期与请求存在的时间相同。通常很短暂,因此在请求的整个过程中,ServletRequest都会被维护。


3
如果您使用过依赖注入框架,如Spring或CDI,您会发现为了让框架注入依赖项,您需要一个标记注释。在Spring中,您会看到@Autowired@Inject,在CDI中,您会看到@Inject@Context的工作方式相同。为了让JAX-RS运行时知道要注入HttpServletRequest,它需要用@Context进行注释。同样,JAX-RS通过@QueryParam注释来知道要注入查询参数。 HttpServletRequest来自servlet容器。当请求到达时,容器创建HttpServletRequest并将其传递给servlet实现。如果JAX-RS运行时看到您想要它,并对其进行注释,则将此对象传递给您的资源方法/类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接