WIP: WebClient -- DIE LĂ–SUNG!
[facebook-errors] / src / main / java / de / juplo / facebook / errors / GraphApiExchangeFilterFunction.java
index 0b583f4..768ec1d 100644 (file)
@@ -1,6 +1,8 @@
 package de.juplo.facebook.errors;
 
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.reactive.function.client.ClientRequest;
 import org.springframework.web.reactive.function.client.ClientResponse;
@@ -15,6 +17,9 @@ import reactor.core.publisher.Mono;
  */
 public class GraphApiExchangeFilterFunction implements ExchangeFilterFunction
 {
+  private static final Logger LOG =
+      LoggerFactory.getLogger(GraphApiExchangeFilterFunction.class);
+
   public static GraphApiExchangeFilterFunction INSTANCE =
       new GraphApiExchangeFilterFunction();
 
@@ -23,14 +28,19 @@ public class GraphApiExchangeFilterFunction implements ExchangeFilterFunction
   public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next)
   {
     return
-    next
-        .exchange(request)
-        .flatMap(response ->
-        {
-          return
-              HttpStatus.Series.CLIENT_ERROR.equals(response.statusCode().series())
-                  ? Mono.error(GraphApiException.create(response))
-                  : Mono.just(response);
-        });
+        next
+            .exchange(request)
+            .flatMap(response ->
+            {
+              return
+                  HttpStatus.Series.CLIENT_ERROR.equals(response.statusCode().series())
+                      ? response
+                          .bodyToMono(String.class)
+                          .flatMap(errorBody -> Mono.error(GraphApiException.create(
+                              response.statusCode(),
+                              response.headers().asHttpHeaders(),
+                              errorBody.getBytes())))
+                      : Mono.just(response);
+            });
   }
 }