Aller au contenu

Retourner des erreurs HTTP 4XX dans une application Spring

Spring HTTP
Auteur
Harpal Singh
Software Engineer
Traduit par
Namastecode
Sommaire

1. Introduction

Dans ce tutoriel rapide, nous allons apprendre comment retourner des erreurs HTTP 4XX dans les applications Spring.

2. Bons codes de statut HTTP dans les API Restful

Lors de la conception d’une API RESTful, nous devons toujours concevoir nos APIs de manière à renvoyer une réponse HTTP significative au client, afin que le résultat de la requête soit clair. Pour les scénarios de chemin heureux, l’approche simple consiste à renvoyer la réponse attendue. Dans ce cas, Spring définira par défaut l’en-tête sur HTTP 200. Cependant, lorsque la requête échoue, nous devons renvoyer un code d’état HTTP approprié au client. Par exemple, lorsque le client envoie une requête avec des données invalides, nous devrions renvoyer un code d’état de requête HTTP 4XX.

Spring offre plusieurs façons de renvoyer la réponse appropriée. Ici, nous allons examiner la classe ResponseEntity.

3. Mauvais exemple de gestion des erreurs HTTP

Considérons un exemple simple où nous avons une méthode de contrôleur qui renvoie le nom d’un étudiant sous forme de chaîne :

@GetMapping(value = "/student/{id}/name")
@ResponseBody
public String getStudentNameById(@PathVariable String id) {
    Optional<Student> student = studentService.findById(matchId);
    if(student.isPresent()){
        return student.get().getName();
    }
    // --- What to do here?
}

Ci-dessus, si nous trouvons l’étudiant, nous retournons son nom ; sinon, nous devons gérer le scénario où il n’est pas trouvé. Par exemple, nous pourrions retourner une chaîne d’erreur :

@GetMapping(value = "/student/{id}/name")
@ResponseBody
public String getStudentNameById(@PathVariable String id) {
    Optional<Student> student = studentService.findById(matchId);
    if(student.isPresent()){
        return student.get().getName();
    }
    return "Student not found";
}

Dans ce cas, la méthode du contrôleur renvoie un code de statut HTTP 200, ce qui pourrait rompre la confiance du client, car la réponse n’est pas celle qu’il attendait. Au lieu de cela, nous devrions renvoyer un code de statut HTTP 404 Not Found.

4. Utilisation de ResponseEntity

Pour aborder ce problème, nous pouvons utiliser la classe ResponseEntity. En enveloppant le type de retour de la méthode du contrôleur dans ResponseEntity<?>, nous pouvons définir à la fois le code d’état HTTP et le corps de la réponse.

Maintenant, nous ne pouvons pas retourner une chaîne directement. Au lieu de cela, nous devons retourner une instance de ResponseEntity :

@GetMapping(value = "/student/{id}/name")
public ResponseEntity<?> getStudentNameById(@PathVariable String id) {
    Optional<Student> student = studentService.findById(matchId);
    if(student.isPresent()){
        return ResponseEntity.ok(student.get().getName());
    }
    return ResponseEntity.notFound().build();
}

Au-dessus, nous utilisons la méthode ResponseEntity.ok() pour renvoyer le nom de l’étudiant s’il est trouvé. Si l’étudiant n’est pas trouvé, nous renvoyons un code de statut HTTP 404 Not Found en utilisant la méthode ResponseEntity.notFound().

À partir de Spring 4.1, la classe ResponseEntity fournit plusieurs méthodes d’assistance pour créer des instances de ResponseEntity avec différents codes d’état HTTP. Cela rend le code plus lisible et expressif.

Par exemple, pour renvoyer un code d’état HTTP 400 Bad Request, nous pouvons utiliser la méthode ResponseEntity.badRequest() ou décider de construire la réponse manuellement :

return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();

5. Avantages de l’utilisation de ResponseEntity

L’utilisation de ResponseEntity<?> comme type de retour pour les méthodes de contrôleur offre plusieurs avantages :

-Flexibilité Cela permet une plus grande flexibilité dans la définition du code d’état HTTP et du corps de la réponse. -Lisibilité Le code est plus lisible et expressif, surtout lorsqu’on utilise les méthodes d’assistance. -Cohérence Cela encourage une approche cohérente à travers votre application pour traiter les réponses HTTP.

6. Conclusion

Dans cet article court, nous avons appris à gérer les erreurs HTTP 4XX dans une application Spring en utilisant la classe ResponseEntity. Tout d’abord, nous avons expliqué le problème à résoudre. Ensuite, nous avons montré l’importance de renvoyer des codes de statut HTTP corrects dans les API RESTful. Enfin, nous avons démontré un exemple d’utilisation de la classe ResponseEntity avec ses méthodes d’assistance.

Articles connexes

Configurer le port pour une application Spring Boot
Spring Basics
Configurer un client Web Java pour les requêtes HTTPS
WebClient HTTPS Spring
Comment réessayer en utilisant Restclient
Spring-Boot Restclient