Spring Boot WebClient ErrorHandling

OnDemand

Top Contributor
Hallo zusammen,

ich möchte in unserer neuen Api WebClient nutzen (Nachfolger von RestTemplate). Dabei möchte ich das Exceptionhandling gleich sauber einbauen. Bisher hab ich das immer so pi mal daumen gemacht und nicht wirklich sauber.

Wir geht ihr dabei vor? Catched ihr die Exception direkt da, wo der API Aufruf gemacht wird oder gebt ihr den "eine Etage" weiter an den Aufrufer der Methode?
Schwer zu verstehen wahrscheinlich, was genau ich meine. Vielleicht kennt jemand eine gute Resource auf GitHub die einen API Client wiklich sauber eingebaut hat, in der man sich was abschauen kann?

Ich hab zb ein Klasse die per Quartz angestoßen wird und dann entsprechend die Daten an die API schickt oder holt.
Dummycode:
Java:
class Datenabgleich(){
    
    starteDatenabgleich(){
        //Hole Daten aus DB
        apiEndpoint.put(Objekt meinObjekt);
    }
}

und eine Klasse welche die API Schnittstelle ist

Java:
class ApiSchnittstelle(){
    
    Objekt put(Objekt objekt){
//hier auch das try catch oder lieber throws in der Methodensignatur und das an den Aufrufer delegieren, damit der entsprechend reagieren kann?
         webClient.put(objekt)
   }
    
    Objekt post(Objekt objekt){
        webClient.post(objekt)
    }
}
 

mrBrown

Super-Moderator
Mitarbeiter
Catched ihr die Exception direkt da, wo der API Aufruf gemacht wird oder gebt ihr den "eine Etage" weiter an den Aufrufer der Methode?
Grundsätzlich nahezu immer letzteres – mit Ausnahmen, bei denen "Fehler" in Form von Exceptions erwartbar sein können und es sinnvolle Reaktionen darauf gibt (bspw. API wirft eine Exception, wenn "suche alle XY" keine Ergebnisse liefert, die (konkrete!) Exception direkt zu fangen und dann zB eine leere Liste zu liefern).
 

OnDemand

Top Contributor
die (konkrete!) Exception direkt zu fangen und dann zB eine leere Liste zu liefern).
so hab ich es bisher auch gemacht. Oder ein NULL wenn eine Entität abgefragt wird. Das dumme ist, dass manche API Dokus keine Fehler ausgeben in der Dokumentation, man tappt dann im dunkeln und muss alle Eventualitäten bedenken, die vielleicht auftreten könnten. Im absoluten Ausnahmefall geb ich dann null zurück
 

mrBrown

Super-Moderator
Mitarbeiter
Das dumme ist, dass manche API Dokus keine Fehler ausgeben in der Dokumentation, man tappt dann im dunkeln und muss alle Eventualitäten bedenken, die vielleicht auftreten könnten.
Mit Exceptions lässt sich das doch relativ einfach abfrühstücken?

ich möchte in unserer neuen Api WebClient nutzen (Nachfolger von RestTemplate
Nur so am Rande: ist das wirklich der Nachfolger (also RestTemplate deprecated und damit ersetzt)? Ob man die reaktive Variante nutzen will, ist eher eine Frage der ganzen Architektur und weniger von "ist neuer".


Im absoluten Ausnahmefall geb ich dann null zurück
null ist btw fast nie sinnvoll :) Da ist Optional (wenn es ein oder kein Wert ist) oder eine leere Liste (wenn es beliebig viele sind) meist der bessere Weg.
 

OnDemand

Top Contributor
Optional, stimmt daran hab ich noch gar nicht gedacht!

Was ich so lese, heisst es, dass Webclient der Nachfolger ist. Hmm ist mir aber grad auch iwie Schnitte, hab mich mit RestTemplate gut angefreundet, werde ich vermutlich auch weiter nutzen.
 

LimDul

Top Contributor
Grundsätzlich nahezu immer letzteres – mit Ausnahmen, bei denen "Fehler" in Form von Exceptions erwartbar sein können und es sinnvolle Reaktionen darauf gibt (bspw. API wirft eine Exception, wenn "suche alle XY" keine Ergebnisse liefert, die (konkrete!) Exception direkt zu fangen und dann zB eine leere Liste zu liefern).
Sehe ich genau so. Eine Exception wird:
* Entweder weitergeworfen
* In eine andere Exception gewrapped
* Fachlich sinnvoll behandelt

Das heißt, an den Stellen, wo ich sie behandeln kann, behandle sie fachlich (Sei es durch Umwandlung in Fehlermelden, oder wie beschrieben durch Rückgabe einer leeren Liste etc.)

Auf welcher Ebene das ist, ist sehr unterschiedlich. Manchmal ist es tief unten in der Anwendung, das nur protokolliert und nach oben einfach "Kein Ergebnis" gemeldet wird. Manchmal ist weiter oben - dafür wrappen wir ggf. technische Exception-Klasse z.B. in eine eigene XYServiceException, weil die Stelle die das Handling macht sich nicht dafür interessieren soll ob es eine JAXB, RestEasy, IOException oder sonst was ist. Sprich an den Stellen, wo der Aufrufer der Methode nichts mehr von der Technologie dahinter sehen soll, wird die Exception gewrapped.

Und wenn ich gar nicht damit umgehen kann laufe ich halt in das Standardfehlerhandling rein und die Anwendung schmiert ab und protokolliert das. Sollte man vermeiden, ist aber meines Erachtens besser als Fehler "silent" zu verschlucken, weil man nicht weiß wie man sie behandeln soll.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Spring Boot Test Assertions mit Objekten Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
R Spring Boot sql Beziehungen Frameworks - Spring, Play, Blade, Vaadin & Co 12
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon Get Request doppelt abfeuern ohne Post Redirect Get Pattern. Spring Boot Thymeleaf MVC Frameworks - Spring, Play, Blade, Vaadin & Co 12
thor_norsk Konfigurationsprobleme mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 13
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Boot Test ob Validation geprüft wurde Frameworks - Spring, Play, Blade, Vaadin & Co 8
K Spring Boot OneToMany Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Spring Boot Docker Image erstellen und mit docker-compose konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
Zrebna Spring Boot/Thymeleaf: Bestätigungsemail senden. Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot und Microservices Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Boot additional Datasource for a single entity Frameworks - Spring, Play, Blade, Vaadin & Co 0
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
M Threads in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 7
W DI-Problem in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Boot: Was bewirkt parent in maven genau? Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Vaadin+Spring Boot erster Seitenload nach Neustart endlos Frameworks - Spring, Play, Blade, Vaadin & Co 0
doncarlito87 Wie erhalte ich ein JSON aus eine NativeQuery (Spring Boot)? Frameworks - Spring, Play, Blade, Vaadin & Co 8
Avalon @Query Select Abfrage liefert falsche Werte (Spring Boot, JPA, Hibernate) Frameworks - Spring, Play, Blade, Vaadin & Co 3
Avalon Erstellung Dockerimage mit spring-boot:build-image in Spring Boot mit Umgebungsvariablen Frameworks - Spring, Play, Blade, Vaadin & Co 0
D Spring Boot Field Injection in MapStruct Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot seltsame Logeinträge: Manipulationsversuche? Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Boot Mile Stone und Snapshot Versionen Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Exception Body Frameworks - Spring, Play, Blade, Vaadin & Co 2
N Spring Boot - Overkill für private Projekte? Frameworks - Spring, Play, Blade, Vaadin & Co 3
K Migration eines internen Frameworks zu Spring:Boot Frameworks - Spring, Play, Blade, Vaadin & Co 0
Z Hibernate & Postgres in Spring Boot (Syntaxprobleme) Frameworks - Spring, Play, Blade, Vaadin & Co 2
Z Spring Boot mit JPA;, Hibernate, Rest & Lombok Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Security/Boot/Vaadin Cookie Problem bei iFrame Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring Boot: Feld ignorieren Frameworks - Spring, Play, Blade, Vaadin & Co 3
N Buch zum Spring Framework bzw. Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Jasypt Spring Boot HIbernate wie komme ich an den Key? Frameworks - Spring, Play, Blade, Vaadin & Co 4
8u3631984 Spring Boot im Docker Container - Logback wird nicht verwendet Frameworks - Spring, Play, Blade, Vaadin & Co 13
sascha-sphw Spring Boot Resource Server (OAuth2) @MockMvc Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot CDN Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Deserialiserung mit JSON Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot POST zu PHP API Frameworks - Spring, Play, Blade, Vaadin & Co 12
8u3631984 Spring boot : Unique Constraint mit Many to Many Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Repository null Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Limits API calls Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring boot mit Keyclaok rollen basiert Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Spring Boot Scheduler flexibel machen Frameworks - Spring, Play, Blade, Vaadin & Co 4
OnDemand Spring Boot + Vaadin API Security Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Spring Boot und seine Module verstehen Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Architektur für Spring Boot Projekt Frameworks - Spring, Play, Blade, Vaadin & Co 5
M Spring Boot, Versionskontrolle und Entwicklungsumgebung und Deployment Frameworks - Spring, Play, Blade, Vaadin & Co 2
Avalon Image aus JSON Objekt im Browser anzeigen (BLOB, extrahieren, konvertieren) Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon CSS Datei wird in Spring Boot mit Thymeleaf im Standardordner nicht gefunden Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Mapping null bei GET Aufruf Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Boot Test mit Junit Frameworks - Spring, Play, Blade, Vaadin & Co 8
J Spring Boot - Reactor Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Boot, H2 und Restschnittstelle synchonisation mit Client Frameworks - Spring, Play, Blade, Vaadin & Co 10
TonioTec Spring Boot Datenbankabfrage Frameworks - Spring, Play, Blade, Vaadin & Co 7
OnDemand Spring Boot encoding Slash in URL Parameter Frameworks - Spring, Play, Blade, Vaadin & Co 7
S Spring Boot startet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot -> War File | 404 in Tomcat Frameworks - Spring, Play, Blade, Vaadin & Co 20
LimDul Spring Boot Anwendung "automatisch" neustarten Frameworks - Spring, Play, Blade, Vaadin & Co 3
A Spring boot Frameworks - Spring, Play, Blade, Vaadin & Co 18
bueseb84 Unit Test mit Spring Boot - Service Autowired Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand DTO <> Entity Hibernate Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 28
OnDemand Verständnisfrage DTO Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 19
OnDemand Spring Boot Load Balancing Frameworks - Spring, Play, Blade, Vaadin & Co 5
S Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Threads Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Boot: Wert aus Config Datei ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot: Ein geschütztes Verzeichnis Frameworks - Spring, Play, Blade, Vaadin & Co 1
bueseb84 Probleme mit Spring Boot Docker und Bootstrap Frameworks - Spring, Play, Blade, Vaadin & Co 9
OnDemand Spring Boot Eureka/Zuul Frameworks - Spring, Play, Blade, Vaadin & Co 0
F Redirect in einer Spring Boot WebApplication Frameworks - Spring, Play, Blade, Vaadin & Co 7
B Erstes Spring Boot Projekt: Gameserver-Manager Frameworks - Spring, Play, Blade, Vaadin & Co 5
V Spring Boot, thymeleaf, Eingaben cashen oder per session speichern? Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Boot Security Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot i18n Frameworks - Spring, Play, Blade, Vaadin & Co 28
bueseb84 Spring Boot : Update H2 Repository Frameworks - Spring, Play, Blade, Vaadin & Co 14
A Spring Boot/ OneToMany Relation Frameworks - Spring, Play, Blade, Vaadin & Co 29
S Spring Boot testen mit Service Klassen Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Controller Spring Boot mit Java Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring Boot H2 Datbase Frameworks - Spring, Play, Blade, Vaadin & Co 2
J Spring Boot Thymleaf mit Java.Optional Frameworks - Spring, Play, Blade, Vaadin & Co 0
L JavaFX Anwendung mit Spring Boot und mehrere FXML Forms Frameworks - Spring, Play, Blade, Vaadin & Co 5
P Mit Maven (und Spring-boot) ein FatJAR und ein EAR bauen Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Basic Authentication langsam Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Start Stop Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
H Spring Boot - Dependency Injection Frameworks - Spring, Play, Blade, Vaadin & Co 26
B Java Spring Boot - POM-Problem Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Boot parallele Requests Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Resttemplate exchange XML Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Root-Pfad zu meiner Spring Boot Application Frameworks - Spring, Play, Blade, Vaadin & Co 3
OnDemand Spring Boot Error Logging Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Spring Boot Transactions Frameworks - Spring, Play, Blade, Vaadin & Co 10

Ähnliche Java Themen

Neue Themen


Oben