Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 4 · Exercice de TD
Les avis des lecteurs
Validation et gestion des erreurs · niveau 2
Énoncé
Écrire POST /api/livres/{isbn}/avis, qui reçoit un avis : un pseudonyme obligatoire de 30 caractères au plus, une note obligatoire de 1 à 5, un commentaire facultatif de 500 caractères au plus. La réponse est 201 avec l'avis, 400 si l'avis est invalide, 404 si le livre n'existe pas.
Corrigé
public record AvisDemande(
@NotBlank(message = "{avis.pseudo.obligatoire}")
@Size(max = 30, message = "{avis.pseudo.long}")
String pseudo,
@NotNull(message = "La note est obligatoire.")
@Min(value = 1, message = "La note va de 1 à 5.")
@Max(value = 5, message = "La note va de 1 à 5.")
Integer note,
@Size(max = 500, message = "Le commentaire ne doit pas dépasser 500 caractères.")
String commentaire) {
}
Les messages entre accolades viennent d'un fichier (exercice 4.9). Le contrôleur vérifie d'abord que le livre existe, ce qui lève la LivreIntrouvableException au besoin :
@PostMapping("/api/livres/{isbn}/avis")
@ResponseStatus(HttpStatus.CREATED)
public Avis publier(@PathVariable String isbn, @Valid @RequestBody AvisDemande demande) {
livres.trouver(isbn); // 404 si le livre n’existe pas
return new Avis(isbn, demande.pseudo(), demande.note(), demande.commentaire());
}
$ curl -s -X POST localhost:8000/api/livres/9782956300052/avis \
-H 'Content-Type: application/json' -d '{"note": 6}'
{"detail":"La requête contient 2 erreur(s).","instance":"/api/livres/9782956300052/avis","status":400,"title":"Requête invalide","erreurs":["Le pseudonyme est obligatoire.","La note va de 1 à 5."]}100 % gratuit
La suite du chapitre est sur Adloun
- 10 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.