IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

[REST] Peut-on avoir 2 "PathParam" au même niveau?


Sujet :

Services Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2017
    Messages : 9
    Par défaut [REST] Peut-on avoir 2 "PathParam" au même niveau?
    Je suis en train d'apprendre la création de service web REST. Je me développe donc un programme classique avec des clients et des produits. Mais je me trouve face à un problème étrange. Je travaille avec Eclipse et un serveur GlassFish. Mon projet s'appelle Test07.

    J'ai écris plusieurs méthode, dont la méthode suivante. Mon but est d'accéder au web service de la manière "http://localhost:8080/Test07/rest/produits/3"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @GET
    @Path("{id}")
    @Produces(MediaType.TEXT_XML)
    public String getProduitParIdXML(@PathParam("id") int id) {
    	...
    }
    Jusque là, tout fonctionnait bien.

    Puis, j'ai décidé d'ajouter la méthode suivante qui me permettrait d'accéder au web service de la manière "http://localhost:8080/Test07/rest/produits/sport"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @GET
    @Path("{type}")
    @Produces(MediaType.TEXT_XML)
    public String getProduitParTypeXML(@PathParam("type") String type) {
    	...
    }
    Et j'obtiens alors un pop-up avec le message d'erreur; 'Publishing to GlassFish 4[domain1]...' has encountered a problem. Cannot deploy Test07

    Je décide alors de mettre la nouvelle méthode "getProduitParTypeXML()" en commentaire ... mais j'obtiens toujours la même erreur. Si je recrée un projet et que je fais des copies-collés du code en récréant chaque classe 1 par 1, ça marche ... jusqu'au moment où je décommente la fonction "getProduitParTypeXML()". Là, le problème revient à nouveau. On dirait que ça pourrit le projet et je ne sais pas comment revenir à un état stable sans devoir à chaque fois recréer un nouveau projet.

    Alors, 2 questions:
    1. Que puis-je faire pour réussir à faire fonctionner de nouveau mon web service en mettant la méthode "getProduitParTypeXML()" en commentaire?
    2. En REST, est-il interdit d'avoir 2 PathParam de même niveau? L'un en int, l'autre en String? C'est-à-dire que j'aurais aimé avoir un truc du genre "http://localhost:8080/Test07/rest/produits/3" pour obtenir les infos du produit 3 et "http://localhost:8080/Test07/rest/produits/sport" pour obtenir les produits de type sport. Peut-être que je m'y prend mal et que je devrais prévoir un truc du genre "http://localhost:8080/Test07/rest/produits&categorie=sport" ?

  2. #2
    Membre Expert
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 479
    Par défaut
    1. Ca ressemble a un probleme d'un fichier genere par le build ou par glassfish qui serait reste en cache. T'as essaye de faire un "Clean" du projet (Project > Clean...), un full redeploy, un restart de glassfish...?
    2. Je crois que Java-RS n'autorise pas ca, et il faut le comprendre: qu'est qui garantit que le "3" dans l'URL n'est pas une string? Si une URL peut etre mappee sur plusieurs methodes, alors le routage est ambigu, et l'ambiguite c'est l'une de forme du mal. Dans ton cas, tu peux avoir une seul methode (qui mappe les strings), regarder si la string correspond a un id ou a un type et invoquer la methode qui va bien. Ca devient alors de la logique metier, a gerer dans ton code, et non de la logique de routage telle que supportee par jax-rs.

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2017
    Messages : 9
    Par défaut
    1. Ca ressemble a un probleme d'un fichier genere par le build ou par glassfish qui serait reste en cache. T'as essaye de faire un "Clean" du projet (Project > Clean...), un full redeploy, un restart de glassfish...?

    Ca marche! Désolé pour ma question bête. C'est du à mon manque de connaissance de Eclipse.



    2. Je crois que Java-RS n'autorise pas ca, et il faut le comprendre: qu'est qui garantit que le "3" dans l'URL n'est pas une string? Si une URL peut etre mappee sur plusieurs methodes, alors le routage est ambigu, et l'ambiguite c'est l'une de forme du mal. Dans ton cas, tu peux avoir une seul methode (qui mappe les strings), regarder si la string correspond a un id ou a un type et invoquer la methode qui va bien. Ca devient alors de la logique metier, a gerer dans ton code, et non de la logique de routage telle que supportee par jax-rs.


    Merci pour la réponse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. MessageFormat : peut-on ne pas doubler les quotes ?
    Par PoichOU dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 04/12/2008, 22h25
  2. ne peut pas simplement "aXSLProc.Process(aCursor);"
    Par didier.cabale dans le forum XMLRAD
    Réponses: 16
    Dernier message: 08/03/2006, 12h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo