2010-07-13 30 views
3

我最近實現了Jersey JAX-RS Rest服務。我創建了一個JIBX提供程序,允許在XML和Java類型之間解組和編組。我想通過在URL路徑中指定版本來對我的服務進行版本化。版本控制將包括用於編組和解組Java Java類型的消息綁定版本。將URI路徑傳遞給JAX-RS提供者

因此,有必要的版本傳遞給定製JIBX提供商,因此包含版本的URL路徑。但是,提供程序接口(MessageBodyWriterMessageBodyReader)不提供其接口方法中的URI路徑。

以下是writeTo()方法MessageBodyWriter接口的方法簽名:

writeTo(Object, Type, Annotation[], MediaType, MultivaluedMap, OutputStream) 

此方法參數不包含路徑URI,因此,自定義的JiBX提供商不能知道哪個消息結合版本它應該用於編組Java類型。有沒有解決的辦法?

+0

糾正我,如果我錯了,但新澤西州實現了JAX-RS,而不是JAX-WS – skaffman 2010-07-13 21:32:54

+0

哦,是啊,你說得對。更新爲JAX-RS – onejigtwojig 2010-07-14 14:32:18

回答

8

如果你想比HttpServletRequest的一些更JAX-RS具體的,你可以注入一個javax.ws.rs.core.UriInfo。

public class MyProvider implements MessageBodyWriter { 
    @javax.ws.rs.core.Context 
    javax.ws.rs.core.UriInfo uriInfo; 
} 

我假設您使用@ javax.ws.rs.PathParam來捕獲路徑參數。然後,您可以使用UriInfo.getPathParameters()。您也可以回退到UriInfo.getPathSegments()以獲取您要查找的信息。這爲您節省了自己解析請求URI的麻煩。任何JAX-RS實現都應該能夠做到這一點。

0

您可以在提供方上定義一個字段的@Context註釋從提供商訪問URI路徑。

例如,

public class CustomProvider implements MessageBodyWriter 
{ 

    @Context HttpServletRequest request; 

    .... 
} 

該字段將自動爲每個請求設定。即使請求設置爲字段,該值也是線程安全的,因爲實際的請求正在使用代理,並且很可能是線程本地來確定屬於線程的請求。