我可以使用@Context注释注入哪些对象?

我是JAX-RS的新手,我试图理解@Context注释是如何工作的。

在javadoc中有六个类的列表( ApplicationUriInfoRequestHttpHeadersSecurityContextProviders )。 但是,我发现在networking上使用这个注释与其他types的代码,例如:

 @GET public String something(@Context HttpServletRequest req) { } 

是否有一个支持types的列表可以用于这个注释? 这个列表是否在标准的执行之间改变?

我目前正在尝试使用Jersey,而且我担心我将编写无法移植到其他JAX-RS实现的代码。

铆接的JAX-RS 规范定义了所有可以通过@Context注入的标准types。

但是如果我是你,我只想查阅你select的提供商的具体文件,看看有什么可用的。

例如,RESTEasy通过@Context提供这些值 。 同时,泽西提供这些 。 显然由于标准的上下文值会有重叠。

根据JAX-RS 2.0规范 ,以下列表总结了可以使用@Context注释注入的所有types:

  • javax.ws.rs.container.ResourceContext
  • javax.ws.rs.core.Application
  • javax.ws.rs.core.HttpHeaders
  • javax.ws.rs.core.Request
  • javax.ws.rs.core.SecurityContext
  • javax.ws.rs.core.UriInfo
  • javax.ws.rs.core.Configuration
  • javax.ws.rs.ext.Providers

以下types在应用程序部署在servlet容器中时才可用:

  • javax.servlet.HttpServletRequest
  • javax.servlet.HttpServletResponse
  • javax.servlet.ServletConfig
  • javax.servlet.ServletContext

JAX-RS 2.1引入了可以用@Context注入的其他types:

  • javax.ws.rs.sse.Sse
  • javax.ws.rs.sse.SseEventSink

除了上面列出的标准types之外,JAX-RS实现(如Jersey , RESTEasy和Apache CXF )可以定义自己的types,可以使用@Context注入。

@Context注释可以用来注入12个对象。 这里是每个人的简要总结

  • HttpHeaders – HTTP标题值和参数
  • UriInfo – URI查询参数和pathvariables
  • SecurityContext – 为给定的HTTP请求提供访问安全相关的数据
  • 请求 – 允许预处理请求处理
  • ServletConfig – ServletConfig
  • ServletContext – ServletContext
  • HttpServletRequest – 请求的HttpServletRequest实例
  • HttpServletResponse – HttpServletResponse实例
  • 应用程序,configuration和提供程序 – >提供有关JAX-RS应用程序,configuration和提供程序的信息
  • ResourceContext – 提供对资源类实例的访问

所有这些实例都可以注入资源方法

 @Path("/") public class EndpointResource { @GET @Produces(MediaType.APPLICATION_JSON) public Response getAllHttpHeaders(final @Context HttpHeaders httpHeaders){ // Code here that uses httpHeaders } } 

或作为一个领域:

 @Path("/") public class EndpointResource { private final @Context HttpHeaders httpHeaders; @GET @Produces(MediaType.APPLICATION_JSON) public Response getAllHttpHeaders(){ // Code here that uses httpHeaders } } 

这里是回答这个问题的五部分系列@Conext用于什么?