Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 12 · Exercice de TD
Revue de code
Projet : l'API de la Librairie · niveau 2
Énoncé
Relever les défauts de ce contrôleur, proposé par un stagiaire :
@RestController
public class StockController {
@Autowired LivreDepot depot;
@PostMapping("/api/stock/{isbn}")
public Livre ajouter(@PathVariable String isbn, @RequestParam int quantite) {
Livre l = depot.findById(isbn).get();
l.remettreEnStock(quantite);
return depot.save(l);
}
}Corrigé
- Injection par champ (
@Autowiredsur un champ) : à remplacer par l'injection par constructeur (chapitre 2). - L'entité est renvoyée telle quelle en JSON : elle expose tout, et couple l'API au schéma (chapitre 3). Un record de réponse.
Optional.get(): un ISBN inconnu donne uneNoSuchElementException, donc une erreur 500, au lieu d'un 404 propre (LivreIntrouvableException).- Aucune validation :
quantitepeut être négative ou nulle. - Aucune transaction explicite, et la logique est dans le contrôleur : elle a sa place dans un service
@Transactional. - L'adresse
/api/stock/**n'est pas prévue dansSecurite: elle est refusée à tous, y compris à l'administrateur. Il faudrait la ranger sous/api/admin/(ou l'autoriser explicitement au rôleADMIN). - Un
POSTqui ajoute à un stock n'est pas idempotent : rejoué après une coupure réseau, il ajoute deux fois. Fixer la nouvelle valeur par unPUTserait plus sûr.
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.