Rückgabe von benutzerdefinierten Statuscodes von Federreglern

1. Übersicht

Dieser kurze Artikel zeigt einige Möglichkeiten, um benutzerdefinierte HTTP-Statuscodes von Spring MVC-Controllern zurückzugeben .

Dies ist häufig wichtig, um das Ergebnis einer Anforderung an einen Client klarer auszudrücken und die vollständige Semantik des HTTP-Protokolls zu verwenden. Wenn beispielsweise bei einer Anforderung ein Fehler auftritt, kann der Client durch Senden eines bestimmten Fehlercodes für jede Art von möglichem Problem dem Benutzer eine entsprechende Fehlermeldung anzeigen.

Die Einrichtung eines grundlegenden Spring MVC-Projekts liegt außerhalb des Geltungsbereichs dieses Artikels. Weitere Informationen finden Sie hier.

2. Benutzerdefinierte Statuscodes zurückgeben

Spring bietet einige wichtige Möglichkeiten, um benutzerdefinierte Statuscodes aus seinen Controller- Klassen zurückzugeben:

  • Verwenden einer ResponseEntity
  • Verwenden der Annotation @ResponseStatus für Ausnahmeklassen und
  • Verwenden der Annotationen @ControllerAdvice und @ExceptionHandler .

Diese Optionen schließen sich nicht gegenseitig aus. weit davon entfernt können sie sich tatsächlich ergänzen.

Dieser Artikel behandelt die ersten beiden Möglichkeiten ( ResponseEntity und @ResponseStatus ). Wenn Sie mehr über die Verwendung von @ControllerAdvice und @ExceptionHandler erfahren möchten , können Sie hier darüber lesen.

2.1. Rückgabe von Statuscodes über eine ResponseEntity

In einem Standard-Spring-MVC-Controller definieren wir eine einfache Zuordnung:

@RequestMapping(value = "/controller", method = RequestMethod.GET) @ResponseBody public ResponseEntity sendViaResponseEntity() { return new ResponseEntity(HttpStatus.NOT_ACCEPTABLE); }

Nach Erhalt einer GET-Anfrage an „ / controller “ gibt Spring eine Antwort mit dem 406-Code (nicht akzeptabel) zurück. Wir haben den spezifischen Antwortcode für dieses Beispiel willkürlich ausgewählt. Sie können einen beliebigen HTTP-Statuscode zurückgeben (die vollständige Liste finden Sie hier).

2.2. Rückgabe von Statuscodes über eine Ausnahme

Wir werden dem Controller eine zweite Methode hinzufügen, um zu demonstrieren, wie eine Ausnahme verwendet wird , um einen Statuscode zurückzugeben:

@RequestMapping(value = "/exception", method = RequestMethod.GET) @ResponseBody public ResponseEntity sendViaException() { throw new ForbiddenException(); }

Nach dem Empfang einer GET-Anfrage an " / exception " löst Spring eine ForbiddenException aus . Dies ist eine benutzerdefinierte Ausnahme, die wir in einer separaten Klasse definieren:

@ResponseStatus(HttpStatus.FORBIDDEN) public class ForbiddenException extends RuntimeException {}

In dieser Ausnahme ist kein Code erforderlich. Die gesamte Arbeit wird durch die Annotation @ResponseStatus erledigt .

In diesem Fall gibt der Controller, der die Ausnahme ausgelöst hat, beim Auslösen der Ausnahme eine Antwort mit dem Antwortcode 403 (Verboten) zurück. Bei Bedarf können Sie der Anmerkung auch eine Nachricht hinzufügen, die zusammen mit der Antwort zurückgegeben wird.

In diesem Fall würde die Klasse folgendermaßen aussehen:

@ResponseStatus(value = HttpStatus.FORBIDDEN, reason="To show an example of a custom message") public class ForbiddenException extends RuntimeException {}

Es ist wichtig zu beachten, dass es zwar technisch möglich ist, eine Ausnahme einen Statuscode zurückgeben zu lassen, in den meisten Fällen jedoch nur logisch sinnvoll ist, Ausnahmen für Fehlercodes (4XX und 5XX) zu verwenden.

3. Fazit

Das Tutorial zeigte, wie benutzerdefinierte Statuscodes von Spring MVC-Controllern zurückgegeben werden.

Die Implementierung finden Sie im Beispiel-GitHub-Projekt.