Spring boot 404 Fehler benutzerdefinierte Fehlerantwort ReST

8

Ich verwende Spring-Boot zum Hosten einer REST-API. Anstatt die Standardfehlerantwort zu haben, möchte ich immer eine JSON-Antwort senden, selbst wenn ein Browser auf die URL zugreift, sowie eine benutzerdefinierte Datenstruktur.

Ich kann dies mit @ControllerAdvice und @ExceptionHandler für benutzerdefinierte Ausnahmen tun. Aber ich kann keine guten Wege finden, dies für Standard- und behandelte Fehler wie 404 und 401 zu tun.

Gibt es irgendwelche guten Muster dafür?

    
Markus 18.06.2015, 14:11
quelle

5 Antworten

3

Ich habe die Beispiellösung zum Überschreiben der Antwort für 404-Fälle bereitgestellt. Die Lösung ist ziemlich einfach und ich poste Beispielcode, aber Sie können mehr Details über den ursprünglichen Thread finden: Spring Boot Rest - Wie konfiguriert man 404 - Ressource nicht gefunden

Zuerst : Definieren Sie den Controller, der Fehlerfälle verarbeitet und die Antwort außer Kraft setzt:

%Vor%

Second : Sie müssen Spring mitteilen, dass im Fall von 404 eine Exception ausgelöst wird (Handler konnte nicht aufgelöst werden):

%Vor%     
Ilya Ovesnov 20.04.2016 05:03
quelle
2

404 Fehler wird von DispatcherServlet behandelt. Es gibt eine Eigenschaft throwExceptionIfNoHandlerFound, die Sie überschreiben können.

In der Application-Klasse können Sie eine neue Bean erstellen:

%Vor%

... und dann die NoHandlerFoundException-Ausnahme in

abfangen %Vor%     
maxie 19.01.2016 15:10
quelle
0

Es scheint, dass Sie eine entsprechend annotierte Methode einführen müssen, z. für nicht unterstützten Medientyp (415) wird es sein:

%Vor%

Allerdings ist es möglicherweise nicht möglich, da 401 und 404 geworfen werden können, bevor sie DispatcherServlet erreichen - in diesem Fall funktioniert ControllerAdvice nicht.

    
Opal 18.06.2015 15:40
quelle
0

Sie können benutzerdefinierte Objekte ErrorPage hinzufügen, die der Definition der Fehlerseite in web.xml entsprechen. Spring Boot bietet ein Beispiel ...

%Vor%

BEARBEITEN: Obwohl ich denke, dass die obige Methode funktioniert, wenn Sie die Fehlerseiten auf die Controller setzen, wäre es noch einfacher, einen benutzerdefinierten ErrorController wie den zu integrieren unten ...

%Vor%     
hyness 18.06.2015 19:43
quelle
0

Siehe Spring Boot-REST-Service-Ausnahmebehandlung . Es zeigt, wie das Dispatcher-Servlet angewiesen wird, Ausnahmen für "No Route Found" zu senden und dann diese Ausnahmen abzufangen. Wir (der Ort, an dem ich arbeite) verwenden dies zur Zeit für unsere REST-Dienste in der Produktion.

    
ogradyjd 21.04.2016 12:32
quelle

Tags und Links