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ètre | Valeur |
|---|---|
| Project | Maven |
| Language | Java |
| Spring Boot | 3.2.0 (ou version stable la plus récente) |
| Group | com.example |
| Artifact | greeting |
| Name | greeting |
| Package name | com.example.demo |
| Packaging | Jar |
| Java | 17 |
É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
- Cliquez sur le bouton Generate
- Un fichier ZIP sera téléchargé:
greeting.zip - 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
- Lancez Visual Studio Code
- Menu: File → Open Folder
- Sélectionnez le dossier
greetingdécompressé - 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
- Dans VS Code, cliquez droit sur
src/main/java/com/example/demo - Sélectionnez New File
- 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
- 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épendance | Rôle |
|---|---|
spring-boot-starter-web | Fournit tout le nécessaire pour créer des applications web REST (Tomcat, Spring MVC, Jackson) |
spring-boot-starter-test | Fournit 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-jpapostgresqllombok
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
- Ouvrez le terminal: Terminal → New Terminal
- Exécutez les commandes:
mvn clean
mvn install
Option B: Via l'Extension Maven
- Ouvrez la vue Maven (icône Maven dans la barre latérale)
- Dépliez votre projet
- Clic droit sur clean → Run
- 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
- Ouvrez
GreetingApplication.java - Cliquez sur Run au-dessus de la méthode
main - 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é:
- Créez une nouvelle requête GET
- URL:
http://localhost:8080/greeting?name=VotreNom - 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:
- Trouver le processus:
netstat -ano | findstr :8080
-
Noter le PID (Process ID) dans la dernière colonne
-
Terminer le processus (en tant qu'administrateur):
taskkill /F /PID <numéro_du_PID>
Sur macOS/Linux:
- Trouver le processus:
lsof -i :8080
- 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:
- Ouvrez l'onglet Extensions (Ctrl + Shift + X)
- Installez ces extensions:
- Extension Pack for Java (Microsoft)
- Spring Boot Extension Pack (VMware)
- Maven for Java (Microsoft)
- Redémarrez VS Code
Problème 4: Maven Non Reconnu
Symptôme:
'mvn' is not recognized as an internal or external command
Solution:
- Téléchargez Maven: https://maven.apache.org/download.cgi
- Ajoutez Maven à votre PATH système
- Redémarrez le terminal
- Vérifiez:
mvn -version
Partie 8: Questions de Compréhension
Questions
-
Que fait l'annotation
@RestController? -
Quelle est la différence entre
@RestControlleret@Controller? -
Que signifie
@GetMapping("/greeting")? -
Pourquoi utilise-t-on
AtomicLongplutôt qu'un simpleLong? -
Que fait
@RequestParam(value="name")? -
Pourquoi l'application répond-elle en JSON automatiquement?
-
Sur quel port l'application démarre-t-elle par défaut?
-
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):
- Code source complet (projet ZIP)
- 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
- Document de réponses aux questions de compréhension
- Exercices complétés (si demandés)
Critères d'Évaluation
| Critère | Points |
|---|---|
| Projet créé correctement avec Spring Initializr | 10% |
| Classes Greeting et GreetingController complètes et fonctionnelles | 30% |
| Application démarre sans erreur | 20% |
| Tests réussis dans le navigateur | 20% |
| Questions de compréhension répondues | 10% |
| Exercices supplémentaires (bonus) | 10% |
| Total | 100% |
Ressources Supplémentaires
Documentation
Tutoriels Vidéo
Outils
- Postman - Pour tester les APIs
- JSON Formatter - Pour formater le JSON
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 cleanavantmvn 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:
- Consultez la section "Résolution de Problèmes"
- Vérifiez les logs dans la console
- Recherchez l'erreur sur Stack Overflow
- Contactez votre enseignant
Bon travail et bon codage!