Использование декларативной гиперссылки Java Jersey @Ref Annotation

Я пытался расширить пример, представленный в Главе 6 (Декларативная гиперссылка) документации Jersey 1.12, но, похоже, уперся в стену в отношении использования аннотации @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;
    }
}

Это прекрасно работает для URL-адреса, сгенерированного для экземпляра объекта коллекции виджетов:

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

Однако я хочу знать, как я могу добавить идентификатор экземпляров виджета в коллекции. к URL для каждого виджета. Таким образом, сгенерированный URI будет выглядеть примерно так:

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

Я не могу найти способ использовать аннотацию Ref для достижения этого, не начав жестко кодировать значение всего пути в классе Widget, чего я хотел бы избежать. если возможно.

Есть ли стандартный способ добиться этого?

7
задан Lord Badger 8 March 2012 в 11:42
поделиться