Java Jersey声明超链接@Ref注释使用



我一直在尝试扩展Jersey 1.12文档第6章(声明性超链接)中提供的示例,但在@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集合对象实例生成的URL:

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

但是,我想知道如何将Collection中Widget实例的id附加到每个Widget的URL中。因此,生成的URI将类似于:

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

如果不开始对Widget类中的整个路径值进行硬编码,我似乎找不到使用Ref注释来实现这一点的方法,如果可能的话,我希望避免这种情况。

有标准的方法来实现这一点吗?

我对该文档的阅读表明,你可以做这样的事情(未经测试!):

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

最新更新