Verwenden von Spring @ResponseStatus zum Festlegen des HTTP-Statuscodes
1. Einführung
In Spring MVC haben wir viele Möglichkeiten zuset the status code of an HTTP response.
In diesem kurzen Tutorial sehen wir den einfachsten Weg: Verwenden der Annotation@ResponseStatus.
2. Auf Controller-Methoden
Wenn ein Endpunkt erfolgreich zurückgegeben wird, gibt Spring eine HTTP 200-Antwort (OK) aus.
Wenn wirresponse status of a controller method angeben möchten, können wir diese Methode mit@ResponseStatus. markieren. Sie hat zwei austauschbare Argumente für den gewünschten Antwortstatus:code, undvalue. Zum Beispiel können wir indicate that the server refuses to brew coffee because it is a teapot:
@ResponseStatus(HttpStatus.I_AM_A_TEAPOT)
void teaPot() {}
Wenn wir einen Fehler signalisieren möchten, können wir eine Fehlermeldung über das Argumentreasonbereitstellen:
@ResponseStatus(HttpStatus.BAD_REQUEST, reason = "Some parameters are invalid")
void onIllegalArgumentException(IllegalArgumentException exception) {}
Beachten Sie, dass Spring beim Setzen vonreasonHttpServletResponse.sendError() aufruft. Daher wird einHTML error page to the client, which makes it a bad fit for REST endpoints gesendet.
Beachten Sie auch, dass Spring nur@ResponseStatus verwendet, wennthe marked method completes successfully (ohneException zu werfen).
3. Mit Fehlerbehandlern
Wir haben drei Möglichkeiten,@ResponseStatus zu verwenden, umException in einen HTTP-Antwortstatus umzuwandeln:
-
unter Verwendung von@ExceptionHandler
-
unter Verwendung von@ControllerAdvice
-
Markieren der KlasseException
Um die ersten beiden Lösungen zu verwenden, müssen wir eine Fehlerbehandlungsmethode definieren. Weitere Informationen zu diesem Thema finden Sie inthis article.
Wir können@ResponseStatus mit diesen Fehlerbehandlungsmethodenthe same way we did with regular MVC methods im vorherigen Abschnitt verwenden.
Wenn wir keine dynamischen Fehlerantworten benötigen, ist die dritte die einfachste Lösung: Markieren Sie die Ausnahmeklasse mit@ResponseStatus:
@ResponseStatus(code = HttpStatus.BAD_REQUEST)
class CustomException extends RuntimeException {}
Wenn Spring dieseException fängt, verwendet es die Einstellungen, die wir in@ResponseStatus angegeben haben.
Beachten Sie, dass Spring immerHttpServletResponse.sendError(), aufruft, wenn wir eineException-Klasse mit@ResponseStatus markieren, unabhängig davon, ob wirreason setzen oder nicht.
Beachten Sie auch, dass Spring dieselbe Konfiguration für Unterklassen verwendet, es sei denn, wir markieren sie auch mit@ResponseStatus.
4. Fazit
In diesem Artikel haben wir gesehen, wie wir@ResponseStatus verwenden können, um HTTP-Antwortcode in verschiedenen Szenarien festzulegen, einschließlich der Fehlerbehandlung.
Wie üblich sind die Beispiele inover on GitHub verfügbar.