2012-08-23 10 views
9

Con JAX-RS, ¿es posible tener más de una clase asignada a una sola ruta? Estoy tratando de hacer algo como esto:JAX-RS múltiples clases con la misma ruta

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

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

esto no está permitido aparentemente como me sale:

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

que siempre se puede crear una clase para manejar las solicitudes y luego delegar en clases de ayuda. Esperaba que hubiera una forma estándar de hacerlo.

Respuesta

2

La especificación JAX-RS no prohíbe tal mapeo. Por ejemplo, la implementación de Resteasy JAX-RS lo permite. La característica debe ser específica del jersey.

Con respecto a:

que siempre se puede crear una clase para manejar las solicitudes y luego delegar en clases de ayuda. Esperaba que hubiera una forma estándar de hacerlo.

Por lo general, tienen las clases de recursos con el mismo nombre que el camino:

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

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

No se puede tener múltiples recursos asignados a la misma trayectoria. Lo intenté hace unos días y caí en un error similar.

Terminé haciendo subcampos como/api/contacts para un recurso y/api/tags para otro.

El único camino largo es crear recursos en varios paquetes y luego crear diferentes aplicaciones para cada uno.

Cuestiones relacionadas