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

标签 java web-services jersey

我最近学习了 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/

相关文章:

c# - 如何在 Visual Studio 中为生产环境配置 Web 引用

java - 线程安全并发使用,多个实例?

java - 如何将CellValueFactory设置为javafx中各种属性的函数?

java - 丰富 :scrollableDataTable is generating an extra column

java - 从 Java 中的字符串中删除 BOM

asp.net - 接收 xml 文件作为 .net Web 服务的参数

java - 如何在 Java CodeName One 中将文件 POST 到 URL?

java - Jersey ContainerRequestFilter - 修改查询参数不会修改 Controller 中的上下文请求

java - 如何在 Windows Server 上部署 java jersey 和 Grizzly

java - 如何将 Grizzly Request 注入(inject) Jersey ContainerRequestFilter