我已在资源类中使用HttpServletRequest
成功注入了@Context
。
是否可以将HttpServletRequest
注入非资源类?我创建了一个执行各种网络操作的类,这些操作需要存储在HttpSession
中的值。例如......
public class RequestExecutor {
@Context
HttpServletRequest request;
public Response performNetworkRequest(Request request) {
// Do network request - I want to access the session without passing the session object around my code everywhere.
return response;
}
}
这可能吗?
答案 0 :(得分:1)
您无法使用@Context
,请参阅JSR-311了解JAX-RS 1.1和JSR-339了解JAX-RS 2.0:
JAX-RS提供了用于获取和处理有关应用程序部署上下文和各个请求的上下文的信息的工具。这些信息可用于
Application
子类(参见第2.1节),根资源类(参见第3章)和提供者(参见第4章)。
您还可以初始化子资源:
ResourceContext
接口提供对资源或子资源的实例化和初始化的访问 默认的每个请求范围中的类。它可以注入以帮助创建和初始化, 或者只是初始化应用程序创建的实例。
另请参阅:ResourceContext#initResource
但你可以使用继承:
public abstract class AbstractResource {
@Context
HttpServletRequest request;
protected Response performNetworkRequest() {
// do something with request
}
}
@Path("myResource")
public class MyResource extends AbstractResource {
// some methods
}