2012-03-08 65 views
7

我一直試圖擴展澤西島1.12文檔的第6章(聲明性超鏈接)中提供的示例,但似乎已經擊中了關於使用@Ref註釋。Java澤西聲明性超鏈接@Ref註釋使用

我的代碼如下:

@Path("/offerings/{offeringId}/widgets") 
@Produces(MediaType.APPLICATION_JSON) 
public class WidgetsResource { 
    @GET 
    @Path("/{widgetId}") 
    public Response get(@PathParam("offeringId") String offeringId, @PathParam("widgetId") String widgetId) { 
    Widgets widgets = new Widgets(); 
    widgets.setOfferingId(Integer.valueOf(offeringId)); 
    Widget widget = new Widget(); 
    widget.setId(Integer.valueOf(widgetId)); 
    widgets.setWidgets(Arrays.asList(widget)); 
    return Response.status(200).entity(widgets).build(); 
    } 
} 

public class Widgets { 
    @Ref(resource = WidgetsResource.class, style=Style.ABSOLUTE) 
    URI uri; 
    @JsonIgnore 
    private int offeringId; 
    private Collection<Widget> widgets; 

    public Collection<Widget> getWidgets() { 
     return widgets; 
    } 

    public void setWidgets(Collection<Widget> widgets) { 
     this.widgets = widgets; 
    } 

    public URI getUri() { 
     return uri; 
    } 

    public int getOfferingId() { 
     return offeringId; 
    } 

    public void setOfferingId(int id) { 
     this.offeringId = id; 
    } 
} 

public class Widget { 
    @Ref(resource = WidgetsResource.class, style=Style.ABSOLUTE, bindings={ 
    @Binding(name="offeringId", value="${entity.offeringId}")} 
    ) 
    URI uri; 
    private int id; 

    public URI getUri() { 
     return uri; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 
} 

這工作正常的Widgets集合對象的實例生成的網址:

"uri": "http://localhost:65080/<app>/offerings/9999/widgets" 

不過,我想知道我可以追加Collection中的Widget實例的ID添加到每個Widget的URL中。因此,URI產生會是這樣的:似乎

"uri": "http://localhost:65080/<app>/offerings/9999/widgets/1234" 

我無法找到使用參考註解的方式來實現這一點沒有開始Widget類中硬編碼的整個路徑值,這是我」如果可能,d喜歡避免。

是否有一個標準的方法來實現這一目標?

回答

1

我該文檔的閱讀說你可以做這樣的事情(未經測試!):

@Ref(value="/offerings/{offeringId}/widgets/{widgetId}", style=ABSOLUTE) 
URI uri; 
+1

您應該還是可以用這種方法做綁定,雖然這裏的悲劇是,你現在在表示需要子資源URI的每一個地方複製硬編碼路徑。如果您在大型應用程序中執行真正的或接近真實的REST,如果這些URI發生更改,這可能會非常麻煩。 – Patrick 2013-02-22 16:51:00