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?
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%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%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.
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%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.
Tags und Links java spring json rest spring-boot