Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 4 · Exercice de TD
Un paramètre validé
Validation et gestion des erreurs · niveau 2
Énoncé
Écrire GET /api/livres/moins-de?prixMax=…, qui renvoie les livres de prix inférieur ou égal à prixMax, et refuse par un 400 avec un message en français un prix négatif. Quelle exception Spring lève-t-il, et comment la Librairie la traite-t-elle ?
Corrigé
La contrainte se pose directement sur le paramètre (voir le chapitre) :
$ curl -s "localhost:8000/api/livres/moins-de?prixMax=-3"
{"detail":"La requête contient 1 erreur(s).","instance":"/api/livres/moins-de","status":400,"title":"Requête invalide","erreurs":["Le prix maximal ne peut pas être négatif."]}
Spring lève une HandlerMethodValidationException. Comme la classe ErreursApi hérite de ResponseEntityExceptionHandler, on redéfinit la méthode qui la traite, pour produire la même forme de réponse que pour un corps invalide :
// Contraintes posées sur les paramètres d’une méthode (@RequestParam, @PathVariable).
@Override
protected ResponseEntity<Object> handleHandlerMethodValidationException(HandlerMethodValidationException ex,
HttpHeaders entetes, HttpStatusCode statut, WebRequest requete) {
List<String> erreurs = ex.getAllErrors().stream()
.map(MessageSourceResolvable::getDefaultMessage)
.toList();
ProblemDetail probleme = ex.getBody();
probleme.setTitle("Requête invalide");
probleme.setDetail("La requête contient " + erreurs.size() + " erreur(s).");
probleme.setProperty("erreurs", erreurs);
return handleExceptionInternal(ex, probleme, entetes, statut, requete);
}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.