我最近学习了 restful web 服务教程,但无法理解什么是 context。有人可以解释它是什么以及 @Context 的作用吗?
最佳答案
JAX-RS 提供了 @Context
注解来注入(inject) 12 个与 HTTP 请求上下文相关的对象实例,它们是:
- SecurityContext - 当前 HTTP 请求的安全上下文实例
- Request - 用于设置前置条件请求处理
- 应用程序、配置和提供程序 -> 提供对 JAX-RS 应用程序、配置和提供程序实例的访问权限
- ResourceContext - 资源关联类实例
- ServletConfig - ServletConfig实例实例
- ServletContext - ServletContext 实例
- HttpServletRequest - 当前请求的 HttpServletRequest 实例
- HttpServletResponse - 当前请求的 HttpServletResponse 实例
- HttpHeaders - 维护 HTTP header 键和值
- UriInfo - 从调用的 URI 中查询参数和路径变量
同时使用 @Inject
(或 Spring 中的 @Autowired
)和执行相同工作的 @Context
有点令人困惑,但希望在下一版本中为 Java EE 带来更多的一致性。与此同时,您将不得不凑合。
一个有趣的特性是所有这些实例都可以作为字段值注入(inject)或直接注入(inject)资源方法。
资源方法参数列表注入(inject)示例:
@Path("/")
public class EndpointResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAllHttpHeaders(final @Context HttpHeaders httpHeaders){
// Code here that uses httpHeaders
}
}
一个注入(inject)字段的例子:
@Path("/")
public class EndpointResource {
private final @Context HttpHeaders httpHeaders;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getAllHttpHeaders(){
// Code here that uses httpHeaders
}
}
如果想了解更多,可以看看本系列文章的回答What is @Conext in JAX-RS used for?
关于java - 了解 REST API——什么是 Context 和 @Context?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38719533/