是否可以在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。
但我不确定是否有可能在类初始化时静态地获取它。。。