Ho creato un servizio JAX-RS (MyService) che ha un numero di sotto risorse, ognuna delle quali è un sottoclasse di MySubResource. La classe di risorsa sub essendo scelto viene scelto in base ai parametri indicati nel percorso MyService, ad esempio:Come creare un servizio JAX-RS dove la risorsa secondaria @Path non ha una barra iniziale
@Path("/") @Provides({"text/html", "text/xml"})
public class MyResource {
@Path("people/{id}") public MySubResource getPeople(@PathParam("id") String id) {
return new MyPeopleSubResource(id);
}
@Path("places/{id}") public MySubResource getPlaces(@PathParam("id") String id) {
return new MyPlacesSubResource(id);
}
}
dove MyPlacesSubResource e MyPeopleSubResource sono entrambe sottoclassi di MySubResource.
MySubResource è definito come:
public abstract class MySubResource {
protected abstract Results getResults();
@GET public Results get() { return getResults(); }
@GET @Path("xml")
public Response getXml() {
return Response.ok(getResults(), MediaType.TEXT_XML_TYPE).build();
}
@GET @Path("html")
public Response getHtml() {
return Response.ok(getResults(), MediaType.TEXT_HTML_TYPE).build();
}
}
risultati vengono elaborati da MessageBodyWriters corrispondenti a seconda del tipo MIME della risposta.
Anche se questo funziona si traduce in percorsi come/persone/Bob/html o/persone/Bob/XML in cui ciò che voglio davvero è /people/Bob.html o /people/Bob.xml
Fa qualcuno sapere come realizzare ciò che voglio fare?
Grazie, questo è esattamente ciò che volevo. Dovrò ricordarlo per la prossima volta che avrò bisogno di questa funzionalità (supponendo che non ci spostiamo dalla maglia: /) – Matt