2012-08-23 13 views
9

Con JAX-RS, è possibile avere più di una classe assegnata a un singolo percorso? Sto cercando di fare qualcosa di simile:JAX-RS classi multiple con lo stesso percorso

@Path("/foo") 
public class GetHandler { 
    @GET 
    public Response handleGet() { ... 
} 

@Path("/foo") 
public class PostHandler { 
    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response handlePost() { ... 
} 

Questo a quanto pare non è permesso come ottengo:

com.sun.jersey.api.container.ContainerException: A root resource, class PostHandler, has a non-unique URI template /foo 

posso sempre creare una classe per gestire le richieste e poi delegare a classi di supporto. Speravo ci fosse un modo standard per farlo.

risposta

2

Le specifiche JAX-RS non vietano tale mappatura. Ad esempio, l'implementazione di Resteasy JAX-RS lo consente. La funzione dovrebbe essere specifica per la maglia.

quanto riguarda:

posso sempre creare una classe per gestire le richieste e poi delegare a classi di supporto. Speravo ci fosse un modo standard per farlo.

Di solito si hanno le classi di risorse con lo stesso nome del percorso:

@Path("/foo") 
public class FooResource { 
    @GET 
    @Path("/{someFooId}") 
    public Response handleGet() { 
     ... 
    } 

    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response handlePost() { 
     ... 
    } 
} 
2

Non si può avere più risorse mappate per lo stesso percorso. Ci ho provato qualche giorno fa e sono atterrato a un errore simile.

Ho finito per eseguire sottoprogrammi come/api/contatti per una risorsa e/api/tag per un'altra.

L'unico altro modo è creare risorse in più pacchetti e quindi creare app diverse per ciascuno.

Problemi correlati