Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →