2013-06-21 31 views
0

我試圖使用RestEasy和Jax-R將請求路由到Java應用程序中的適當資源。但是,我在使用@ApplicationPath註釋時遇到了問題。我想在一個模式來傳遞,並有它的路線任何模式匹配到合適的位置RestEasy @ApplicationPath使用模式

我已經試過這樣:

@ApplicationPath("*/rest/v1/")... 

和我可以路線的路徑,如:

/MyApplication/rest/v1/ 

/AnotherApp/rest/v1/ 

相同的申請。

但是,RestEasy給了我一個404它不能匹配的資源,但如果我硬編碼路徑沒有* /它工作正常。是否有可能在@ApplicationPath中放置這樣的模式?

編輯:

這樣做的整個目的是使應用程序的根路徑配置的,並且它具有通過過濾器運行以檢查配置。但是,如果在運行時配置@ApplicationPath可能是一種更好的解決方案。

回答

1

@ApplicationPath僅用於RestEasyActivator類。

對於資源使用@Path。現在,當清除時請閱讀:

@Path註釋不限於簡單的路徑表達式。您還可以將正則表達式插入@ Path的值。例如:

@Path("/resources) 
public class MyResource { 

    @GET 
    @Path("{var:.*}/stuff") 
    public String get() {...} 
} 

以下的GET將路由到的getResource()方法:

GET /resources/stuff 
GET /resources/foo/stuff 
GET /resources/on/and/on/stuff 

表達式的格式是:

"{" variable-name [ ":" regular-expression ] "}" 

正則表達式部分是可選的。如果未提供表達式,則默認爲某個特定片段的通配符匹配。在正則表達式的術語,表述默認爲 「([] *)」

例如:

@Path("/resources/{var}/stuff") 

將匹配這些:

GET /resources/foo/stuff 
GET /resources/bar/stuff 

但不匹配:

GET /resources/a/bunch/of/stuff 

鏈接:http://docs.jboss.org/resteasy/docs/1.0.0.GA/userguide/html_single/

+0

謝謝您的答覆,但我明白了很多。我只是想爲'@ Path'資源創建一個全局應用程序路徑。所以每個@Path也有一個@ ApplicationScoped。例如,我想這樣做:'@ApplicationPath(「/.../」)'然後'@Path(「/ stuff」)'這樣一個帶'/.../ stuff'的url將會到達資源由'@Path(「/ stuff」)表示' – user2009114

+0

我最終創建了一個捕獲所有請求並留下@ApplicationPath(/)的Web過濾器。在過濾器中,我做了各種驗證,然後通過修改的uri傳遞請求以取出basePath。我希望這對將來的人有用,所以如果在運行時需要更改baseUrl,那可能是最簡單的方法。 – user2009114