EMSI-Marrakech
Filière : 4IIR
2025/2026
TP : Spring boot et api Rest Partie 2
Objectif du TP
Ce TP est la continuation du TP précédent. Le but est de renvoyer des réponses à l’aide de
ResponseEntity au lieu des données directement.
Modifier le Contrôleur
Dans le contrôleur ProduitController ajouter la dépendance ProduitService et l’injecter par
constructeur.
Endpoints à créer :
1. GET /api/produits : Liste tous les produits
2. GET /api/produits/{id} : Récupère un produit par ID
3. POST /api/produits : Crée un nouveau produit
4. PUT /api/produits/{id} : Met à jour un produit existant
5. DELETE /api/produits/{id} : Supprime un produit
6. GET /api/produits/search?nom=xxx : Recherche par nom
Annotations à utiliser :
● @GetMapping, @PostMapping, @PutMapping, @DeleteMapping
● @PathVariable pour les IDs dans l'URL
● @RequestParam pour les paramètres de recherche
● @RequestBody pour les données JSON
Au lieu de renvoyer les données directement comme dans le TP précédent, renvoyer les
réponses avec les codes statut appropriés en utilisant ResponseEntity.
1
EMSI-Marrakech
Filière : 4IIR
2025/2026
Analyse des deux exemples fournis :
Exemple 1: GET tous les produits
2
EMSI-Marrakech
Filière : 4IIR
2025/2026
Explication :
● @GetMapping = méthode HTTP GET
● ResponseEntity<List<Produit>> = retourne une réponse HTTP avec liste de produits
● [Link]() = appelle le service
● [Link](produits) = retourne HTTP 200 avec les données
Exemple 2: GET par ID
Explication :
● @GetMapping("/{id}") = GET avec paramètre dans l'URL
● @PathVariable Long id = récupère l'ID depuis l'URL
● if (produit != null) = vérifie si le produit existe
● [Link](produit) = 200 OK si trouvé
● [Link]().build() = 404 Not Found si non trouvé
Instructions :
1. Implémenter POST /api/produits
● Utilisez @PostMapping
3
EMSI-Marrakech
Filière : 4IIR
2025/2026
● Utilisez @RequestBody pour récupérer les données JSON
● Appelez [Link](produit)
● Retournez [Link]([Link]).body(...)
1. Implémenter PUT /api/produits/{id}
● Combinaison de @PutMapping et @PathVariable
● Appelez [Link](id, produit)
● Gérez le cas où le produit n'existe pas (retourner 404)
2. Exercice 3: Implémenter DELETE /api/produits/{id}
● Utilisez @DeleteMapping
● Appelez [Link](id)
● Retournez [Link]().build() pour 204 No Content
3. Exercice 4: Implémenter GET /api/produits/search
● Utilisez @RequestParam pour le paramètre "nom"
● Appelez [Link](nom)
● Retournez la liste des résultats
Partie 5 : Tests avec Postman
●L'application démarre sur [Link]
● Testez directement : [Link]
Configuration Postman
1. Ouvrez Postman
2. L'URL de base est : [Link]
Scénarios de Test
Test 1: Récupérer tous les produits
GET [Link]
Résultat attendu : Liste de 3 produits en JSON
Test 2: Récupérer un produit spécifique
GET [Link]
Résultat attendu : Produit avec ID 1
Test 3: Créer un nouveau produit
POST [Link]
Content-Type: application/json
{
4
EMSI-Marrakech
Filière : 4IIR
2025/2026
"nom": "Casque Audio",
"description": "Casque sans fil Bluetooth",
"prix": 1000.99
}
Résultat attendu : Produit créé avec ID auto-généré
Test 4: Modifier un produit
PUT [Link]
Content-Type: application/json
{
"nom": "Laptop Gaming Pro",
"description": "Ordinateur portable gaming",
"prix": 12999.99
}
Résultat attendu : Produit modifié
Test 5: Supprimer un produit
DELETE [Link]
Test 6: Rechercher des produits
GET [Link]
Résultat attendu : Produits contenant "lap" dans le nom