如何将HttpServletRequest注入非资源类?

时间:2016-05-22 20:17:29

标签: java jax-rs

我已在资源类中使用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;
    }
}

这可能吗?

1 个答案:

答案 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 
}