10 votes

Configuration du @Path au niveau des classes et des méthodes

J'utilise javax.ws.rs.Path dans ma classe REST pour configurer le chemin. Le comportement est étrange... Ma configuration est quelque chose comme ceci... Ce ne sont pas les fichiers réels, mais j'ai montré une réplication pour vous faire comprendre mes configurations.

Classe 1

@Path("/v2")
public class BoxResource {        
   @POST
   @Path("/ie/box")
   public Response createbox(...) {
     ...
   }
}

Classe 2

@Path("/v2/ie")
public class BagResource {        
    @POST
    @Path("/bag")
    public Response createbag(...) {
        ...
    }        
}

Lorsque je fais une requête HTTP comme /v2/ie/box le message d'erreur "Server configuration error" s'affiche. Mais si je change ma Class2 comme ci-dessous, cela fonctionne bien.

@Path("/v2/ie/bag")
public class BagResource {            
    @POST
    public Response createbag(...) {

    }
}

Pourquoi la configuration de @path au niveau des classes et des méthodes est-elle différente ?

16voto

Une demande de /v2/ie/box est mis en correspondance avec Class2 parce qu'il a

@Path("/v2/ie")

comme une annotation de classe.

Le plus long Path gagne dans cette affaire. Class1 n'est jamais regardé puisqu'il a l'annotation de classe plus courte @Path("/v2") .

Depuis Class2 n'a pas de méthode qui correspond aux autres /box vous obtiendrez un 404 Not Found .

Recommandation

  1. Utilisez @Path annotations uniquement sur les méthodes : @Path("/v2/ie/bag") y @Path("/v2/ie/box") OU
  2. utiliser un avec une annotation de classe de @Path("/v2/ie") et les annotations de méthode de @Path("/bag") y @Path("/box") .

Modifier

Voir également la section "3.7 Correspondance entre les demandes et les méthodes de ressources" de l'annexe 1. la spécification JAX-RS 2.0 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X