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 :

Tutoriel sur le développement de services web REST avec JAX-RS, Maven et Eclipse


Sujet :

Services Web Java

  1. #1
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut Tutoriel sur le développement de services web REST avec JAX-RS, Maven et Eclipse
    Bonjour,

    Je vous propose un tutoriel qui présente sous la forme d'exercices comment utiliser l'API JAX-RS pour le développement de services web REST.

    Chaque exercice est fourni avec un projet Java Maven contenant des classes et des fichiers de configuration qu'il faudra compléter au fur et à mesure des questions. À la fin de chaque exercice, une solution du projet Java sera donnée.

    L'adresse du tutoriel est disponible ici : http://mbaron.developpez.com/tutorie...maven-eclipse/

    Bon tutoriel et apprentissage autour de JAX-RS.

    Mickael

    UPDATE du 8 janvier 2019

    Une nouvelle version est disponible toujours à la même adresse : http://mbaron.developpez.com/tutorie...maven-eclipse/

    Au menu des nouveautés
    • prise en compte des dernières versions de JAX-RS et Jersey
    • support de Java 11
    • plus d'exercices à « trou »
    • déploiement avec Docker
    • codes sources hébergés sur Github


    N'hésitez pas si vous avez des commentaires

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  2. #2
    Membre confirmé
    Profil pro
    Developpeur
    Inscrit en
    Septembre 2013
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Septembre 2013
    Messages : 230
    Points : 543
    Points
    543
    Par défaut
    Salut Mickael et un grand merci pour ce tuto très instructif que j'ai déjà mis en application pour un projet perso

    J'ai une question triviale sur la meilleure manière de gérer les erreurs côté serveur dans une méthode Http (GET, POST, whatever). Imaginons que j'ai un code de ce genre, le plus simple possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @GET
    @Produces("MediaType.APPLICATION_JSON")
    public Collection<MyEntity> getAllEntities()
    {
        return (Collection<MyEntity>) myJpaDaoEntity.readAll();
    }
    Si ma méthode foire et que le code balance une exception côté serveur mais que le client, lui, ne voit rien venir justement parce que je n'ai pas donné d'instruction spécifique au serveur (j'ai le problème avec RestEasy sur Firefox qui tourne en boucle). Pour prévenir ce comportement je suppose qu'il est plus propre de tout mettre dans un try/catch et de renvoyer un objet Response avec le code Status désiré et le résultat dans l'objet entity de Response comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            @GET
    	@Produces("MediaType.APPLICATION_JSON")
    	public Response Collection<MyEntity> getAllEntities()
            {
    		Response response = null;
    		try{
    			Collection<MyEntity> myEntities = myJpaDaoEntity.readAll();
    			response = Response.status(200).entity(myEntities).build();
    		}catch(Exception e){
    		       response = Response.status(400).build();
    		}
    		return response
    	 }
    Entre les deux codes il y a une sacré différence de verbosité, et même si le second me semble plus robuste est-ce qu'il y a un moyen de faire la même chose plus facilement ?

    PS : je bosse déjà avec des webservices mais pas de manière RESTFull, donc tout ce qui est code de retour m'intéresse au plus haut point

  3. #3
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Salut,

    C'est clairement la seconde façon qu'il faut utiliser. Ainsi, il est plus simple de retourner les codes de status.

    Dans mon tutoriel, j'omets cela car je voulais être simple mais je me rends compte que je ne présente pas la bonne façon de faire et ça me gène. A noter que j'en parle dans mon support de cours : http://mbaron.developpez.com/soa/jaxrs/

    Je vais faire une mise à jour pour introduire Response dans le code de BookTrainResource.

    Merci

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  4. #4
    Membre confirmé
    Profil pro
    Developpeur
    Inscrit en
    Septembre 2013
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Septembre 2013
    Messages : 230
    Points : 543
    Points
    543
    Par défaut
    Merci pour ta réponse.

    J'avais regardé ton support de cours, c'est pourquoi je me posais la question

  5. #5
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    @JackJnr,

    Je viens d'impacter le tutoriel afin de prendre en compte les sorties de type Response. J'ai motivé cela par ce paragraphe.

    Ce premier service REST n'est pas parfait puisque le type de retour est une simple chaîne de caractères. Comment pourrions-nous retourner à la fois une information, un code de statut ou des informations dans l'en-tête de la réponse ? Pour cela, nous allons utiliser un objet Response pour le retour des prochains services REST.
    ça te convient ?

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    bonjour , je suis débutant en web service et je suis en train de créer une application android mais j'ai une difficulté au niveau de la connexion à l base de donnée , je voulais avoir comment connecter app android au web service et d'autre part comment connecter web service au base

  7. #7
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2020
    Messages : 2
    Points : 3
    Points
    3
    Par défaut blocage import
    Bonjour,

    Merci pour ce tutoriel. Je suis débutant en service web et souhaiterais m'y mettre et donc suivre vos tutos. Malheureusement je bloque sur l'étape d'importation du projet de l'exercice 1:

    "Importer le projet Maven jaxrs-tutorial-exercice1 (File -> Import -> Maven -> Existing Maven Projects), choisir le répertoire du projet, puis faire Finish"

    J'ai bien installé Maven, Eclipse, cURL etc ...

    Faut-il télécharger quelque chose à partir du site gitHub ? Si oui faut-il le mettre dans un répertoire quelconque ? J'ai fait une capture de la page du site gitHub sur laquelle j'arrive et là je ne vois pas ce qu'il faut faire pour télécharger le projet ...

    Voila c'est un peu bête comme question mais je ne vois pas du tout ...

    Nicolas
    Images attachées Images attachées  

  8. #8
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Bonjour,

    Il faut d'abord faire un git clone ...

    Je vous conseille de regarder l'introduction du tutoriel.

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2021
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    bonjour.
    j'ai un problème a l’exercice 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        // TODO: préciser le verbe HTTP.
        // TODO: le chemin doit commencer par `/search`.
        // Les paramètres sont tous des paramètres de requête.
        public ??? searchTrainsByCriteria(String departure, String arrival, String departureTime) {
            System.out.println("TrainResource.searchTrainsByCriteria()");
     
            // TODO: retourner une réponse avec :
            //   1/ les trois paramètres de requête en en-tête
            //   2/ un sous-ensemble de la liste des trains 
            //      (exemple : `TrainBookingDB.getTrains().subList(0, 2)`)

    j'aimerais que vous m'aidiez a ce niveau, je ne sais pas comment faire

  10. #10
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Bonjour,

    Pour chaque énoncé de code avec question, je propose la solution via le code replié. Il suffit de déplier pour voir la solution.

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

Discussions similaires

  1. Réponses: 21
    Dernier message: 05/12/2020, 19h43

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