Question JAX-RS plusieurs classes avec le même chemin


Avec JAX-RS, est-il possible que plusieurs classes soient affectées à un seul chemin? J'essaie de faire quelque chose comme ça:

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

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

Ceci n'est apparemment pas autorisé car je reçois:

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

Je peux toujours créer une classe pour gérer les demandes, puis déléguer aux classes d'assistance. J'espérais qu'il y avait un moyen standard de le faire.


10
2017-08-23 17:43


origine


Réponses:


La spécification JAX-RS n'interdit pas une telle cartographie. Par exemple, l'implémentation de Resteasy JAX-RS le permet. La fonctionnalité doit être spécifique au maillot.

En ce qui concerne:

Je peux toujours créer une classe pour gérer les demandes, puis déléguer aux classes d'assistance. J'espérais qu'il y avait un moyen standard de le faire.

Vous avez généralement les classes de ressources avec le même nom que le chemin:

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

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

2
2017-08-23 18:13



Vous ne pouvez pas avoir plusieurs ressources mappées sur le même chemin. J'ai essayé cela il y a quelques jours et j'ai atterri à une erreur similaire.

J'ai fini par faire des sous-chemins tels que / api / contacts pour une ressource et / api / tags pour une autre.

La seule autre solution consiste à créer des ressources dans plusieurs packages, puis à créer des applications différentes pour chacun.


2
2017-08-24 18:41