Spring @ResponseStatus zum Setzen des HTTP-Statuscodes

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.