了解REST API - 什么是Context和@Context?

时间:2016-08-02 11:44:32

标签: java web-services jersey

我最近通过了宁静的网络服务教程,但无法理解上下文是什么。有人可以解释它是什么以及 @Contex t会做什么?

3 个答案:

答案 0 :(得分:2)

JAX-RS提供@Context注释以注入与HTTP请求的上下文相关的12个对象实例,它们是:

  • SecurityContext - 当前HTTP请求的安全上下文实例
  • 请求 - 用于设置前提条件请求处理
  • 应用配置提供商 - >提供对JAX-RS应用程序,配置和提供程序实例的访问
  • ResourceContext - 资源竞争aclass实例
  • ServletConfig - ServletConfig实例实例
  • ServletContext - ServletContext实例
  • HttpServletRequest - 当前请求的HttpServletRequest实例
  • HttpServletResponse - 当前请求的HttpServletResponse实例
  • HttpHeaders - 维护HTTP标头键和值
  • UriInfo - 从名为
  • 的URI查询参数和路径变量

@Inject(或Spring中的@Autowired)和@Context执行相同的工作有点令人困惑,但希望能够为Java EE带来更多的一致性在下一版中。与此同时,你将不得不做。

一个有趣的特性是所有这些实例都可以作为字段值注入或直接注入资源方法。

注入资源方法参数列表的示例:

@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
  }
}

如果您想了解更多信息,请查看回答问题的这一系列文章What is @Conext in JAX-RS used for?

答案 1 :(得分:0)

有关编程术语中 context 的说明,请查看此answer

JAX-RS API提供@Context注释。通常,此类注释可用于获取与请求或响应相关的上下文Java类型。这些类型可以注入由JAX-RS运行时管理的类中。

例如,要在资源方法中注入HttpServletRequest,您可以执行以下操作:

@GET
public Resonse foo(@Context HttpServletRequest request) {
    ...
}

其他资源:

答案 2 :(得分:-1)

REST是一种架构风格,是实现Web服务的方式之一。 (其他是SOAP)。有许多REST架构的实现,其中一个在java中是Jersey(https://jersey.java.net/) @context是Jersey框架中的注释。它是来自jax rs jar的一个类。 (https://jersey.java.net/apidocs-javax.jax-rs/2.0.1/javax/ws/rs/core/Context.html