Rückgabe benutzerdefinierter Statuscodes von Federsteuerungen

Rückgabe benutzerdefinierter Statuscodes von Spring Controllern

1. Überblick

Dieser kurze Artikel zeigt einige Möglichkeiten fürreturn custom HTTP status codes from Spring MVC controllers.

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

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

2. Benutzerdefinierte Statuscodes zurückgeben

Spring bietet einige Hauptmethoden, um benutzerdefinierte Statuscodes aus denController-Klassen zurückzugeben:

  • unter Verwendung einesResponseEntity

  • Verwenden der Annotation@ResponseStatus für Ausnahmeklassen und

  • Verwenden der Anmerkungen@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 darüberhere lesen.

2.1. Rückgabe von Statuscodes über einResponseEntity

In einem Standard-Spring-MVC-Controller definieren wir ein einfaches Mapping:

@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 unterhere).

2.2. Rückgabe von Statuscodes über eine Ausnahme

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

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

Beim Empfang einer GET-Anfrage an „/exception“ wirft Spring einForbiddenException. 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@ResponseStatuserledigt.

In diesem Fall gibt der Controller, der die Ausnahme ausgelöst hat, 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 technisch möglich ist, eine Ausnahme dazu zu bringen, einen beliebigen Statuscode zurückzugeben. In den meisten Fällen ist es jedoch nur logisch sinnvoll, Ausnahmen für Fehlercodes (4XX und 5XX) zu verwenden.

3. Fazit

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

Die Implementierung finden Sie inexample GitHub project.