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