2011-04-18 35 views
9

我有一個webapp重定向到一個特定的URI:比方說/service/library。在另一個包中,我有一個jaxrs服務器,它在URI中偵聽/service,並定義一些bean來處理請求。已經有好幾個bean了,其中一個類已經被實現來處理/service/library的請求。我正在嘗試創建一個新類,該類還處理/service/library的請求,但具有不同的絕對URI路徑,例如:/service/library/mynewlibrary。我的問題是,是否有可能在兩個類中定義相同的@Path標識符,或者它們必須是唯一的,換句話說,我需要爲我的新類實現使用像/service/mylibrary這樣的URI,而不是實施第二個類也使用相同的@Path標識符?我對JAX-RS很新,所以我希望我的問題很有意義!JAX-RS - 兩個類可以具有相同的@Path標識符嗎?

謝謝!

+1

當你嘗試時會發生什麼? – 2011-04-18 22:16:40

+0

當我嘗試它時,我的新類中沒有方法被調用,並且只有當前類處理/服務/庫中的方法被稱爲 – Stephen 2011-04-18 22:37:09

+0

@ user663041您確定新類已註冊嗎?你使用什麼JAX-RS框架? – Tarlog 2011-04-19 17:01:42

回答

4

可能有兩個匹配URI的@Path註釋。在你的情況下,如果servlet映射是service,你可能有@Path("/library")@Path("library/mynewlibrary")。 當請求到達時,匹配路徑按降序排列,因此當有請求到達/service/library/mynewlibrary時,應調用第二個類。

+0

您提到的是@Path(「library/mynewlibrary」),該類中的@Path標識符還是該類中的方法?這就是我想要做的:classA將處理'/ service/library/books',而classB將處理'/ service/library/movies',因此它們都會有一個@Path(「/ library」)標識符他們的類聲明,而兩個類中的方法將處理兩個不同的URI。例如,假設它們都是相對路徑,classA.getBooks()將具有'@Path(「/ books」)',而classB.getMovies()將具有'@Path(「/ movies」)''。兩個@Path(「/ library」)可能嗎? – Stephen 2011-04-19 22:36:31

+0

我是指類註解而不是方法註釋。你的方法是行不通的,因爲框架可能會選擇錯誤的類:它首先嚐試選擇最正確的類,然後選擇最正確的方法。 – Tarlog 2011-04-20 05:57:18

+0

如果您有一個處理「書籍」的類和一個處理「電影」的類,爲什麼您需要方法級別的註釋?把註釋放在課堂上,問題就會解決。 – Tarlog 2011-04-20 06:04:37

1

確實有兩種方法可以使用相同的@Path註釋,例如,如果它們通過其他方式(如HTTP方法或@Consumes註釋)進行區分。類上的@Path充當類的方法上的默認/根目錄@Path。而且,如果你有一條路徑在另一條路徑的「內部」,這根本就不是問題; JAX-RS指定使用可能的最具體匹配。 (我寧願不這樣做,而是讓「外部」類在適當的部分匹配中返回對「內部」類的引用,以便每條路徑都有一條可追蹤的路徑來負責,這肯定會導致一個類。這需要儘管安排@Path註釋的相當不同的方式。)

但如果你已經結束了兩個方法,可以服務於同一傳入的請求,你已經有了一個衝突和JAX-RS的實現將是自由選擇使用哪一個(以實現相關的方式)。這可能不是你想要的,因爲計算機在給予自由選擇時傾向於做出錯誤的決定。

0

您可以使用以下配置來實現您的目標:擁有/ service/library/mynewlibrary。

在您現有的類中,您在類級別配置了/ service/library,因此您可以在新級別的類級別配置/服務,然後在方法級別configure/library/mynewlibrary。

這樣就不會有兩個班的路徑相同,你的目標也達到了。我試過這個,它的工作原理。

相關問題