Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 9 · Exercice de TD
Une route inconnue de l'API
Le client Vue face au serveur · niveau 3 (difficile)
Énoncé
Le serveur d'essai répondait 404 et {"erreur":"Route inconnue : GET /api/inconnu"} à une adresse /api/… qui n'existe pas ; Spring Boot répond 401. Obtenir le même 404, sans rien ouvrir de ce qui est réservé au personnel.
Corrigé
Deux changements. La sécurité laisse passer les adresses /api/** qui ne sont pas déjà réservées (les règles s'appliquent dans l'ordre : celles du personnel, plus haut, restent en vigueur) :
// exercice 9.9 : une route inconnue de l'API arrive jusqu'à Spring MVC (404)
.requestMatchers("/api/**").permitAll()
Spring MVC lève alors NoResourceFoundException, que la classe ErreursApi du chapitre 4 met au format de l'API :
/** Exercice 9.9 : une adresse /api/… qui n'existe pas, comme le serveur d'essai. */
@Override
protected ResponseEntity<Object> handleNoResourceFoundException(NoResourceFoundException ex,
HttpHeaders entetes, HttpStatusCode statut, WebRequest requete) {
String message = "Route inconnue : " + ex.getHttpMethod() + " /" + ex.getResourcePath();
return handleExceptionInternal(ex, probleme(HttpStatus.NOT_FOUND, "Route inconnue", message),
entetes, statut, requete);
}
@Test
void routeInconnue() {
assertThat(mvc.get().uri("/api/inconnu"))
.hasStatus(404)
.bodyJson().extractingPath("$.erreur").isEqualTo("Route inconnue : GET /api/inconnu");
}
@Test
void ladministrationResteProtegee() {
assertThat(mvc.get().uri("/api/admin/commandes")).hasStatus(401);
}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.