2013-07-04 79 views
7

我在我的REST類中使用javax.ws.rs.Path類來配置路徑。這是行爲奇怪的...我的配置是這樣的...這不是實際的文件,但我已經顯示覆制,讓你瞭解我的配置。在類級別和方法級別的路徑配置

Class1的

@Path("/v2") 
public class BoxResource {   
    @POST 
    @Path("/ie/box") 
    public Response createbox(...) { 
    ... 
    } 
} 

的Class2

@Path("/v2/ie") 
public class BagResource {   
    @POST 
    @Path("/bag") 
    public Response createbag(...) { 
     ... 
    }   
} 

當我做出這樣/v2/ie/box一個HTTP請求時,它拋出的服務器配置錯誤。但是如果我像下面那樣改變我的Class2,它就可以正常工作。

@Path("/v2/ie/bag") 
public class BagResource {    
    @POST 
    public Response createbag(...) { 

    } 
} 

這是爲什麼?在類級別和方法級別@path的配置是否有所不同?

回答

13

/v2/ie/box的請求被映射到Class2因爲IS有

@Path("/v2/ie") 

作爲一類註釋。

最長的Path在這種情況下獲勝。 Class1從未被看過,因爲它有較短的班級註釋@Path("/v2")

由於Class2沒有映射到其餘的/box的方法,因此您將收到404 Not Found

建議

  1. 使用@Path註釋只在方法@Path("/v2/ie/bag")@Path("/v2/ie/box")OR
  2. 使用用的@Path("/bag")@Path("/v2/ie")和方法的註釋類註釋一個資源類和@Path("/box")

編輯

還參照第 「3.7匹配請求到資源的方法」 的the JAX-RS 2.0 spec

+0

做出更改後,我做了類級路徑(「/ v2」)這兩個類,即使那麼它也拋出了相同的錯誤 –

+0

請閱讀我在我的答案鏈接的規範。請將您的*真實*代碼添加到您的問題中。 – 2013-07-05 06:35:18

+0

我不理解規範...並且在我的盒子類中還有其他方法,其路徑類似於/ v2/ow/..所以不能創建一個資源..還可以添加真實代碼..如果您需要信息,我可以提供你的 –

相關問題