Ho cercato di espandere l'esempio fornito nel capitolo 6 (Hyperlinking dichiarativo) della documentazione di Jersey 1.12 ma sembra che abbia colpito un muro per quanto riguarda l'uso dell'annotazione @Ref .Java Hyperlinking dichiarativo @Ref Annotation Usa
Il mio codice è il seguente:
@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;
}
}
Questo funziona bene per l'URL generato per un'istanza dell'oggetto insieme Widget:
"uri": "http://localhost:65080/<app>/offerings/9999/widgets"
Tuttavia, vorrei sapere come posso aggiungere l'ID delle istanze del widget all'interno della raccolta all'URL per ciascun widget. Così, l'URI generato sarebbe qualcosa di simile:
"uri": "http://localhost:65080/<app>/offerings/9999/widgets/1234"
io non riesco a trovare un modo di usare i Rif annotazione per raggiungere questo obiettivo senza iniziare a codificare l'intero valore del percorso all'interno della classe Widget, che ho' Mi piacerebbe evitare se possibile.
Esiste un modo standard per raggiungere questo obiettivo?
si dovrebbe comunque essere in grado di fare le Associazioni con questo approccio, anche se la tragedia è che sei ora duplicando il percorso hard coded in ogni singolo luogo che una rappresentazione ha bisogno di un URI di sub-risorsa. Se stai facendo REST vero o quasi vero in un'applicazione di grandi dimensioni, questo potrebbe essere un enorme problema se questi URI cambiano mai. – Patrick