Comment gérer les erreurs HTTP dans les méthodes Spring MVC @ResponseBody
Problème :
Quand en utilisant Spring MVC avec une approche @ResponseBody, comment une méthode peut-elle répondre avec une erreur HTTP 400 « mauvaise demande » si une condition particulière n'est pas remplie ?
Solution :
Approche originale :
Le code d'origine a tenté de renvoyer une chaîne si la condition n'était pas remplie, ce qui n'est pas réalisable puisque @ResponseBody attend un objet ResponseEntity :
<code class="java">@ResponseBody public String match(@PathVariable String matchId) { String json = matchService.getMatchJson(matchId); if (json == null) { // TODO: how to respond with e.g. 400 "bad request"? } return json; }</code>
Solution :
Modifiez le type de retour de la méthode en ResponseEntity
<code class="java">@ResponseBody public ResponseEntity<String> match(@PathVariable String matchId) { String json = matchService.getMatchJson(matchId); if (json == null) { return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } return new ResponseEntity<>(json, HttpStatus.OK); }</code>
Pour une alternative plus propre après Spring 4.1, utilisez les méthodes d'assistance dans ResponseEntity :
<code class="java">@ResponseBody public ResponseEntity<String> match(@PathVariable String matchId) { String json = matchService.getMatchJson(matchId); if (json == null) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); } return ResponseEntity.ok(json); }</code>
Cette approche permet le retour d'un code d'état HTTP et d'un contenu appropriés en fonction du résultat de l'exécution.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!