2014-10-08 53 views
0

是否有可能在JAX-RS 2.0資源類實例構建時(也可能在靜態類初始化時)獲取Java EE 7應用程序的上下文路徑,還是僅在資源類中的端點請求期間可用?JAX-RS 2.0資源實例構建時的應用程序上下文路徑

上下文路徑指的是在Java EE 7應用程序中調用HttpServletRequest#getContextPath()所返回的字符串。

我想你可能可以有多個部署應用程序的上下文路徑別名。如果是這樣,上下文路徑可能僅在請求時纔可用。

但是,我不在乎實際在請求的URL中使用的上下文路徑。規範或默認的上下文路徑將適用於該類中的端點對我來說足夠好。

獲得這種上下文路徑的技術不需要特定於JAX-RS 2.0。它可以來自其他Java EE 7規範,只要它在JAX-RS 2.0資源類構建時(或者更廣泛地說,在靜態類初始化時)工作即可。

更新:

我忘了提,該類是CDI @ApplicationScoped,所以它的構造是不是在請求時被調用,因爲這將是如果它是@RequestScoped

回答

1

您可以通過在資源的構造函數注入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()方法會奏效。

它將返回一個URI,如http://<hostname>:<port>/<context-path>/<base-path>

但我不知道它有可能在課堂初始化時間得到它靜態...

+0

感謝您的信息。我會嘗試一下。實際上,我之前看到過這個類,但是因爲它的javadocs指定了這個類,所以我們對它進行了折扣:「如果在請求範圍外調用,所有方法拋出java.lang.IllegalStateException」http://docs.oracle.com/javaee/7/api/javax /ws/rs/core/UriInfo.html – XDR 2014-10-08 13:46:07

+0

此外,我最初忘記提及類是@ ApplicationScoped,所以構造函數在請求時不會被調用。 – XDR 2014-10-08 13:49:47

+0

事實上,除了'getBaseUri()'和'getBaseUriBuilder()'以外,javadoc在每種方法上都指定了它。我試過Wildfly 8.1,它工作。資源也是'@ ApplicationScoped'。 – Benjamin 2014-10-08 13:51:19

相關問題