我可以使用@Context注释注入哪些对象?
我是JAX-RS的新手,我试图理解@Context
注释是如何工作的。
在javadoc中有六个类的列表( Application
, UriInfo
, Request
, HttpHeaders
, SecurityContext
, Providers
)。 但是,我发现在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用于什么?