JAX-RS2.0资源实例构建中的应用程序上下文路径



是否可以在JAX-RS2.0资源类实例构建时(也可能在静态类初始化时)获得Java EE7应用程序的上下文路径,或者它只在向资源类中的端点发出请求时可用?

上下文路径是指Java EE 7应用程序中对HttpServletRequest#getContextPath()的调用将返回的字符串。

我想,对于一个已部署的应用程序,您可能有多个上下文路径别名。如果是这样,上下文路径可能仅在请求时可用。

但是,我并不关心请求的URL中实际使用的上下文路径。对我来说,一个规范的或默认的上下文路径对类中的端点来说已经足够了

获得这种上下文路径的技术不需要特定于JAX-RS2.0。它可以来自其他一些JavaEE7规范,只要它在JAX-RS2.0资源类构建时(或者更广泛地说,在静态类初始化时)工作即可。

更新:

我忘了提到这个类是CDI @ApplicationScoped,所以在请求时不会调用它的构造函数,就像它是@RequestScoped一样。

您可以通过在资源的构造函数中注入UriInfo来获得REST应用程序的基本URI:

@ApplicationScoped
@Path("/resourcePath")
public class MyRestResource {
    public MyRestResource (@Context UriInfo uriInfo) {
        URI uri = uriInfo.getBaseUri();
    }
    @GET
    public Response someMethod(){
        ...
    }
}

大多数UriInfo方法将在资源构建时返回IllegalStateException,但getBaseUri()方法可以工作。

它将返回一个类似http://<hostname>:<port>/<context-path>/<base-path>的URI。

但我不确定是否有可能在类初始化时静态地获取它。。。

最新更新