Adloun

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

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 →