如何使用@Context批注
在什么是javax.ws.rs.core.context的第2部分中? 您学习了如何使用@Context批注从SecurityContext类的注入实例检索安全信息,以及如何通过ResourceContext实例使用JAX-RS资源类。
在本文中,您将学习如何将@Context批注与请求和配置,提供程序和应用程序一起使用。
使用Request类进行请求前提条件处理
java.ws.rs.core软件包提供了一个方便的帮助器类,称为Request ,它有助于预处理请求。 让我们跳入一个例子,看看它是如何工作的。
@GET
@Path("{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response updateEmployee(@PathParam("id") int id,
@Context Request request,
Employee emp) {
Employee employee = database.get(id);
EntityTag tag = new EntityTag(Integer.toString(employee.hashCode()));
Response.ResponseBuilder builder = request.evaluatePreconditions(tag);
if (builder != null) {
// Preconditions not met so return
return builder.build();
}
// Preconditions met so update employee
employee.salary = emp.salary;
return Response.noContent().build();
}
资源方法updateEmployee()接受雇员实体作为参数及其ID和Request实例。 该方法从数据库中检索员工,并使用其哈希码生成ETag。 通过将ETag传递给Request实例的validatePreconditions()方法来评估 ETag。 如果不满足先决条件,则方法返回,否则将更新雇员实体,然后返回给调用方。
java.ws.rs.core.Request方法具有以下所示的6种方法:
evaluatePreconditions()
evaluatePreconditions(Date lastModified)
evaluatePreconditions(Date lastModified, EntityTag eTag)
evaluatePreconditions(EntityTag eTag)
String getMethod()
Variant selectVariant(List<Variant> variants)
三个接口:配置,提供程序和应用程序
有三个接口提供有关JAX-RS应用程序运行环境的信息。 它们是javax.ws.rs.core.Application , javax.ws.rs.core.Configuration和javax.ws.rs.ext.Providers 。
Application实例指定JAX-RS应用程序的组件,并通过三种方法提供进一步的数据:
getClasses()
getProperties()
getSingletons()
Configuration实例保存已配置的应用程序上下文的数据,并包含检索与启用属性的功能和组件注册有关的数据的一系列方法。
Providers类提供提供程序实例的运行时查找。 它包含四个getter方法,这些方法返回给定类型的上下文解析器,一个异常类的异常管理器,一个消息正文读取器和一个消息正文写入器。
接下来是什么?
这就是什么是javax.ws.rs.core.context?的第3部分,第4部分。 您将学习如何使用@Context注释注入仅在将应用程序部署在servlet容器中时可用的类的实例。 他们是:
- javax.servlet。 HttpServletRequest
- javax.servlet。 HttpServletResponse
- javax.servlet。 ServletConfig
- javax.servlet。 ServletContext
代码库
这个以及我所有文章的源代码都在readlearncode_articles Github存储库中
翻译自: https://www.javacodegeeks.com/2017/08/javax-ws-rs-core-context-part-3.html