2014-02-07 102 views
0

我想使用HTTP請求具有一個版本REST API頭:版本REST API + JAXRS 2.0

GET/someResource

版本:1.0

現在,如果我有這個資源的兩個版本,我的JaxRS Web應用程序需要能夠提供適合於任何一個請求版本的響應。因此我希望下面的類是我的類路徑的一部分:

@Path("/someResource") 
public class SomeResourceV1 { 
    **snip** 
} 

@Path("/someResource") 
public class SomeResourceV2 { 
    **snip** 
} 

現在,我想這取決於版本頭請求分派到這些資源類中的一個。我假設這將使用servlet過濾器來完成。但是因爲我使用的是Guice,我認爲我要找的是每個請求注入器。

請求是否已與綁定SomeResourceV1 1.0版使用注射器否則,如果要求有綁定SomeResourceV2

我認爲有一種方式來獲得我想要的東西通過繼承GuiceFilter 2.0版使用注射器,但我米不完全確定。有沒有人嘗試過這樣的事情?

回答

0

你要求不完全是,但你可以在請求媒體類型的版本(例如:application/vnd.foo.v1+json - vnd指定一個自定義的供應商類型,並+json讓JAX-RS實現知道傳入的請求實體是JSON格式)。 。 然後,您可以使用在你的每一個方法(如@Consumes註釋調度:@Consumes("application/vnd.foo.v1+json") VS @Consumes("application/vnd.foo.v2+json"),而無需添加自定義過濾器

+0

感謝澤維爾,我想到了媒體的類型,但我傾向於同意wtih喬:HTTP:/ /stackoverflow.com/a/11923744/1028367另外,我並不喜歡在同一個類中混合使用2個版本的代碼的想法,我可能會不小心改變了V1代碼路徑上的某些事情,從而無意中破壞了V1消費者。就像沒有V1綁定或暴露爲一個jaxrs資源,如果V2被請求。 –