Adloun

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 (@Autowired sur 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 une NoSuchElementException, donc une erreur 500, au lieu d'un 404 propre (LivreIntrouvableException).
  • Aucune validation : quantite peut ê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 dans Securite : elle est refusée à tous, y compris à l'administrateur. Il faudrait la ranger sous /api/admin/ (ou l'autoriser explicitement au rôle ADMIN).
  • Un POST qui ajoute à un stock n'est pas idempotent : rejoué après une coupure réseau, il ajoute deux fois. Fixer la nouvelle valeur par un PUT serait plus sûr.

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 →