2013-07-04 3 views
7

J'utilise la classe javax.ws.rs.Path dans ma classe REST pour configurer le chemin. Il se comporte bizarrement ... Ma configuration est quelque chose comme ça ... Ce ne sont pas des fichiers réels, mais j'ai montré une réplication pour vous faire comprendre mes configurations.Configuration @Path au niveau de la classe et au niveau de la méthode

Class1

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

Classe2

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

Quand je fais une requête HTTP comme /v2/ie/box, il jette l'erreur de configuration du serveur. Mais si je change ma Classe2 comme ci-dessous, ça fonctionne bien. Pourquoi est-ce le cas? La configuration de @path au niveau de la classe et au niveau de la méthode diffère-t-elle?

Répondre

13

Une demande de /v2/ie/box est mis en correspondance Class2 car est a

@Path("/v2/ie") 

comme annotation de classe. La plus longue Path gagne dans ce cas. Class1 n'est jamais regardé puisqu'il a l'annotation de classe la plus courte @Path("/v2").

Depuis Class2 n'a aucune méthode qui correspond au /box restant, vous obtiendrez un 404 Not Found.

Recommandation

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

Modifier

Voir aussi la section "3.7 Demandes assortis aux méthodes ressources" de the JAX-RS 2.0 spec.

+0

Après avoir fait des changements j'ai fait le chemin de niveau de classe ("/ v2") les deux classes, même alors il me lance la même erreur –

+0

S'il vous plaît lire la spécification que j'ai liée dans ma réponse. Et s'il vous plaît ajoutez votre * real * code à votre question. –

+0

Je ne comprends pas la spécification ... Et il y a d'autres méthodes dans ma classe box dont le chemin est comme/v2/ow/.. Donc ne peut pas faire une ressource .. Aussi désolé pourrait ajouter du code réel .. si vous avez besoin d'informations je peux vous fournir –

Questions connexes