Was ist der beste Weg, um wieder verschiedene Arten von ResponseEntity in Spring MVC oder Spring-Boot
Ich geschrieben habe einfache rest-Anwendungen mit Spring MVC 4 (oder Spring-Boot). Im controller habe ich zurück ResponseEntity
. Aber in einigen Fällen, die ich geben wollen Erfolg JSON und wenn es Fehler bei der überprüfung möchte ich JSON Fehler. Derzeit Erfolgs-und Fehlermeldungen sind völlig Verschieden, Also ich habe 2 Klassen erstellt, für Fehler und Erfolg. Innerhalb der controller-ich will zurück ResponseEntity<Success>
, wenn die interne Logik ist in Ordnung. Ansonsten möchte ich zu dem zurückkehren ResponseEntity<Error>
. Gibt es eine Möglichkeit, es zu tun.
Success
und Error
sind die 2 Klassen, die ich zur Darstellung der Erfolgs-und Fehler-Antwort.
- Eine Lösung ist die Verwendung
ResponseEntity<Object>
. Eine andere ist die Verwendung der ein BaseClass oder Schnittstelle für die Typen Erfolg und Fehler. - Könnten Sie nicht einfach zurück
ResponseEntity
im yout Methode definition ? ` öffentlichen ResponseEntity myControllerMethod(...) und wieder entweder einResponseEntity<Success>
oder eineResponseEntity<Error>
ResponseEntity<Either<Error, Success>>
wäre gut, wenn könnten Sie verwalten, um die Implementierung der Datenstruktur in java
Du musst angemeldet sein, um einen Kommentar abzugeben.
Empfehle ich die Verwendung von Spring
@ControllerAdvice
zu handhaben Validierung Fehler. Lesen diese Anleitung für eine gute Einführung, beginnend bei der Sektion namens "Spring-Boot-Error Handling". Für eine eingehende Diskussion, es gibt einen Artikel im Frühjahr.io-blog, das aktualisiert wurde auf April 2018.Eine kurze Zusammenfassung, wie das funktioniert:
ResponseEntity<Success>
. Es wird keine Verantwortung für die Rücksendung ein Fehler oder eine exception Antworten.@ControllerAdvice
@ExceptionHandler
ResponseEntity<Error>
Mit diesem Ansatz, Sie müssen nur für die Implementierung Ihres controller-exception handling in einem Ort für alle Endpunkte in Ihrer API. Es macht es auch einfach für Ihre API, um eine einheitliche Ausnahme-Antwort-Struktur für alle Endpunkte. Dies vereinfacht das exception-handling für Ihre Kunden.
GET /api/customer/{iban}
gibt 200 ok " oder 404-nicht gefunden? Rat würdest du dann eine Exception zu werfen und zu handhaben, dass Sie die gleiche Weise?ResponseEntity
.ResponseEntity
ermöglicht Ihnen die Steuerung der HTTP-status-code, der zurückgegeben wird, und es ist ein generischer Typ, so können Sie Rückgabe-Objekt-Struktur. Hier eine Erklärung, wie es zu benutzen: baeldung.com/spring-response-entityResponseEntity
- und Java-exceptions, die sich gegenseitig ausschließen, was nicht der Fall ist, (2) die OP wollte, um wieder eine andere geben Sie unter exception - /Fehler-Bedingungen, die die macht@ControllerAdvice
eine bessere option, und (3) können Sie sowohlResponseEntity
und@ControllerAdvice
für die gleiche Methode.Können Sie die Rückgabe generischer Platzhalter
<?>
zurückSuccess
undError
auf eine gleiche Anfrage mapping-Methode@Mark Norman Antwort ist der richtige Ansatz,
Either
werden, so dass ich einepublic ResponseEntity<Either<Error, Success>> method()
oder besser einepublic Either<ResponseEntity<Error>, ResponseEntity<Success>> method()
. Ich denke, die Art und Weise, das zu tun, wäre eineHttpMessageConverter
würde wissen, wie zu behandeln, und würde einfach konvertieren, die Entweder auf der linken/rechten Seite und lassen Sie die normale Verarbeitung passieren .. so konnte ich mein signal gültig Staaten, ohne mit Ausnahmen.. irgendwelche Ideen dazu?ich bin nicht sicher, aber ich denke, Sie können
@ResponseEntity
und@ResponseBody
und senden 2 verschiedene eines ist der Erfolg, und die zweite ist die Fehlermeldung wie :Für mehr Details beziehen Sie sich auf diese:
http://www.concretepage.com/spring-4/spring-4-mvc-jsonp-example-with-rest-responsebody-responseentity
Seiner Rückkehr
ResponseEntity
ohne die Verwendung von Generika, wie folgt,GsonHttpMessageConverter
zu beschweren und werfen Fehler. Aber einfach ändern, umResponseEntity<?>
würde es funktionieren.Können Sie eine Karte mit Ihrem Objekt oder eine Zeichenfolge, wie unten :
Hier ist eine Möglichkeit, dass ich es tun würde:
Können Sie auch umsetzen wie das zurückgeben, Erfolg und Fehler, die auf einem gleichen request-mapping-Methode von Object Klasse(Elternklasse jede Klasse in java) :-
Ich verwendet, um eine Klasse verwenden wie dieses. Die statusCode wird gesetzt, wenn ein Fehler mit der Fehlermeldung set in Nachricht. Daten werden entweder in der Karte oder in einer Liste wie und bei Bedarf.
}
Hoffe, das hilft.