Aller au contenu principal

TP2.1 - Application "Greeting" avec Spring Boot

Objectifs​

Ce travail pratique vous permettra de:

  • Créer votre premier projet Spring Boot avec Spring Initializr
  • Configurer Visual Studio Code pour le développement Spring Boot
  • Créer un contrôleur REST simple
  • Comprendre la structure d'un projet Spring Boot
  • Résoudre des problèmes courants de démarrage

Prérequis​

Avant de commencer, assurez-vous d'avoir installé:

  • JDK 17 ou supérieur
  • Visual Studio Code
  • Extensions VS Code requises:
    • Extension Pack for Java
    • Spring Boot Extension Pack
    • Maven for Java
  • Maven 3.9+ (recommandé pour stabilité)

Vérification des Prérequis​

# Vérifier Java
java -version

# Vérifier Maven
mvn -version

Partie 1: Création du Projet avec Spring Initializr​

Étape 1.1: Accéder à Spring Initializr​

Ouvrez votre navigateur et allez sur: https://start.spring.io/

Étape 1.2: Configuration du Projet​

Configurez votre projet avec les paramètres suivants:

ParamètreValeur
ProjectMaven
LanguageJava
Spring Boot3.2.0 (ou version stable la plus récente)
Groupcom.example
Artifactgreeting
Namegreeting
Package namecom.example.demo
PackagingJar
Java17

Étape 1.3: Ajout des Dépendances​

Cliquez sur "Add Dependencies" et ajoutez:

  • Spring Web - Pour créer des applications web REST

Important: Pour ce TP, nous n'ajoutons QUE Spring Web. N'ajoutez pas:

  • Spring Data JPA
  • PostgreSQL Driver
  • Lombok

(Nous verrons ces dépendances dans les TPs suivants)

Étape 1.4: Génération du Projet​

  1. Cliquez sur le bouton Generate
  2. Un fichier ZIP sera téléchargé: greeting.zip
  3. Décompressez ce fichier dans votre workspace (par exemple: C:\workspace\greeting)

Partie 2: Ouverture du Projet dans VS Code​

Étape 2.1: Ouvrir le Projet​

  1. Lancez Visual Studio Code
  2. Menu: File → Open Folder
  3. Sélectionnez le dossier greeting décompressé
  4. VS Code va automatiquement détecter le projet Maven

Étape 2.2: Attendre l'Initialisation​

VS Code va:

  • Télécharger les dépendances Maven
  • Configurer le projet Java
  • Indexer les fichiers

Note: La première fois peut prendre quelques minutes.

Étape 2.3: Structure du Projet​

Vous devriez voir la structure suivante:

greeting/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/demo/
│ │ │ └── GreetingApplication.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
├── pom.xml
└── README.md

Partie 3: Création des Classes​

Étape 3.1: Créer la Classe Greeting​

  1. Dans VS Code, cliquez droit sur src/main/java/com/example/demo
  2. Sélectionnez New File
  3. Nommez le fichier: Greeting.java

Code de la classe Greeting:

package com.example.demo;

public class Greeting {

private Long id;
private String content;

public Greeting(Long id, String content) {
super();
this.id = id;
this.content = content;
}

public Long getId() {
return id;
}

public String getContent() {
return content;
}

public void setId(Long id) {
this.id = id;
}

public void setContent(String content) {
this.content = content;
}
}

Étape 3.2: Créer la Classe GreetingController​

  1. Dans le même dossier, créez un nouveau fichier: GreetingController.java

Code du contrôleur:

package com.example.demo;

import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {

private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();

@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value="name") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}

Partie 4: Vérification du pom.xml​

Étape 4.1: Ouvrir pom.xml​

Ouvrez le fichier pom.xml et vérifiez les dépendances.

Dépendances attendues (seulement 2):

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

Étape 4.2: Explication des Dépendances​

DépendanceRôle
spring-boot-starter-webFournit tout le nécessaire pour créer des applications web REST (Tomcat, Spring MVC, Jackson)
spring-boot-starter-testFournit les outils de test (JUnit, Mockito, etc.)

Étape 4.3: Si Vous Avez des Dépendances Supplémentaires​

Si vous avez ajouté par erreur:

  • spring-boot-starter-data-jpa
  • postgresql
  • lombok

SUPPRIMEZ-LES du pom.xml pour éviter des erreurs.

Pourquoi? Ces dépendances nécessitent une configuration supplémentaire (base de données, etc.) que nous ne faisons pas dans ce TP.


Partie 5: Compilation et Exécution​

Étape 5.1: Nettoyer et Compiler avec Maven​

Option A: Via le Terminal Intégré de VS Code

  1. Ouvrez le terminal: Terminal → New Terminal
  2. Exécutez les commandes:
mvn clean
mvn install

Option B: Via l'Extension Maven

  1. Ouvrez la vue Maven (icône Maven dans la barre latérale)
  2. Dépliez votre projet
  3. Clic droit sur clean → Run
  4. Clic droit sur install → Run

Étape 5.2: Exécuter l'Application​

Option A: Via le Terminal

mvn spring-boot:run

Option B: Via VS Code

  1. Ouvrez GreetingApplication.java
  2. Cliquez sur Run au-dessus de la méthode main
  3. Ou appuyez sur F5

Étape 5.3: Vérifier le Démarrage​

Vous devriez voir dans la console:

  .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot ::

...
Started GreetingApplication in X.XXX seconds

Le serveur démarre sur le port 8080 par défaut.


Partie 6: Test de l'Application​

Étape 6.1: Test dans le Navigateur​

Ouvrez votre navigateur et testez les URLs suivantes:

Test 1:

http://localhost:8080/greeting?name=Armstrong

Résultat attendu:

{
"id": 1,
"content": "Hello, Armstrong!"
}

Test 2:

http://localhost:8080/greeting?name=François

Résultat attendu:

{
"id": 2,
"content": "Hello, François!"
}

Test 3:

http://localhost:8080/greeting?name=Patrick

Résultat attendu:

{
"id": 3,
"content": "Hello, Patrick!"
}

Étape 6.2: Observer le Compteur​

Rafraîchissez la page plusieurs fois et observez:

  • L'ID s'incrémente à chaque appel
  • Le compteur est maintenu en mémoire pendant que l'application tourne

Étape 6.3: Test avec Postman (Optionnel)​

Si vous avez Postman installé:

  1. Créez une nouvelle requête GET
  2. URL: http://localhost:8080/greeting?name=VotreNom
  3. Cliquez sur Send

Partie 7: Résolution de Problèmes​

Problème 1: Erreur de Démarrage - Dépendances Manquantes​

Symptôme:

Failed to configure a DataSource: 'url' attribute is not specified

Cause: Vous avez probablement spring-boot-starter-data-jpa dans votre pom.xml

Solution:

Ouvrez pom.xml et supprimez ces dépendances si présentes:

<!-- À SUPPRIMER -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

Puis relancez:

mvn clean install
mvn spring-boot:run

Problème 2: Port 8080 Déjà Utilisé​

Symptôme:

Port 8080 was already in use.

Cause: Une autre application utilise déjà le port 8080.

Solution 1: Changer de Port

Ouvrez src/main/resources/application.properties et ajoutez:

server.port=8081

Ou si vous utilisez application.yml:

server:
port: 8081

Puis testez avec: http://localhost:8081/greeting?name=Test

Solution 2: Terminer le Processus Utilisant le Port 8080

Sur Windows:

  1. Trouver le processus:
netstat -ano | findstr :8080
  1. Noter le PID (Process ID) dans la dernière colonne

  2. Terminer le processus (en tant qu'administrateur):

taskkill /F /PID <numéro_du_PID>

Sur macOS/Linux:

  1. Trouver le processus:
lsof -i :8080
  1. Terminer le processus:
kill -9 <PID>

Problème 3: Extensions VS Code Manquantes​

Symptôme: VS Code ne détecte pas le projet Java

Solution:

  1. Ouvrez l'onglet Extensions (Ctrl + Shift + X)
  2. Installez ces extensions:
    • Extension Pack for Java (Microsoft)
    • Spring Boot Extension Pack (VMware)
    • Maven for Java (Microsoft)
  3. Redémarrez VS Code

Problème 4: Maven Non Reconnu​

Symptôme:

'mvn' is not recognized as an internal or external command

Solution:

  1. Téléchargez Maven: https://maven.apache.org/download.cgi
  2. Ajoutez Maven à votre PATH système
  3. Redémarrez le terminal
  4. Vérifiez: mvn -version

Partie 8: Questions de Compréhension​

Questions​

  1. Que fait l'annotation @RestController?

  2. Quelle est la différence entre @RestController et @Controller?

  3. Que signifie @GetMapping("/greeting")?

  4. Pourquoi utilise-t-on AtomicLong plutôt qu'un simple Long?

  5. Que fait @RequestParam(value="name")?

  6. Pourquoi l'application répond-elle en JSON automatiquement?

  7. Sur quel port l'application démarre-t-elle par défaut?

  8. Que se passe-t-il si on oublie le paramètre ?name= dans l'URL?

Réponses Attendues​

(À compléter par l'étudiant)


Partie 9: Exercices Supplémentaires​

Exercice 1: Ajouter un Paramètre Optionnel​

Modifiez le contrôleur pour que le paramètre name soit optionnel avec une valeur par défaut "World".

Indice: Utilisez defaultValue dans @RequestParam

Exercice 2: Ajouter une Nouvelle Méthode​

Créez une nouvelle méthode dans le contrôleur:

  • URL: /greeting/time
  • Retourne: Un greeting avec l'heure actuelle

Exercice 3: Modifier le Template​

Changez le template pour retourner "Bonjour, %s!" au lieu de "Hello, %s!"

Exercice 4: Ajouter un Endpoint de Santé​

Créez un endpoint /health qui retourne simplement "OK"


Livrables​

À remettre (selon les instructions de votre enseignant):

  1. Code source complet (projet ZIP)
  2. Captures d'écran montrant:
    • L'application en cours d'exécution dans VS Code
    • Les tests dans le navigateur avec différents noms
    • Le compteur qui s'incrémente
    • Référence: Voir exemples de captures d'écran
  3. Document de réponses aux questions de compréhension
  4. Exercices complétés (si demandés)

Critères d'Évaluation​

CritèrePoints
Projet créé correctement avec Spring Initializr10%
Classes Greeting et GreetingController complètes et fonctionnelles30%
Application démarre sans erreur20%
Tests réussis dans le navigateur20%
Questions de compréhension répondues10%
Exercices supplémentaires (bonus)10%
Total100%

Ressources Supplémentaires​

Documentation​

Tutoriels Vidéo​

Outils​

Captures d'Écran de Référence​

Documents avec captures d'écran détaillées:

Consultez le dossier Google Drive suivant pour voir des captures d'écran complètes de chaque étape du TP:

📸 Captures d'écran du Projet Greeting

Contenu disponible:

  • Document PDF avec captures d'écran annotées
  • Document Word avec instructions visuelles
  • Exemples de résultats attendus

Note: Ces captures d'écran utilisent STS (Spring Tool Suite), mais les concepts et résultats sont identiques avec VS Code.


Prochaines Étapes​

Une fois ce TP complété, vous serez prêt pour:

  • TP2: Connexion à une base de données avec JPA
  • TP3: Création d'une API CRUD complète
  • TP4: Sécurisation avec Spring Security

Notes Importantes​

Bonnes Pratiques:

  • Toujours exécuter mvn clean avant mvn install
  • Arrêter l'application (Ctrl + C) avant de relancer
  • Vérifier que le port est libre avant de démarrer
  • Sauvegarder régulièrement votre travail

Aide:

Si vous rencontrez des problèmes:

  1. Consultez la section "Résolution de Problèmes"
  2. Vérifiez les logs dans la console
  3. Recherchez l'erreur sur Stack Overflow
  4. Contactez votre enseignant

Bon travail et bon codage!


Retour au Module 2