WIP: WebClient -- DIE LĂ–SUNG!
[facebook-errors] / src / main / java / de / juplo / facebook / errors / GraphApiExchangeFilterFunction.java
1 package de.juplo.facebook.errors;
2
3
4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory;
6 import org.springframework.http.HttpStatus;
7 import org.springframework.web.reactive.function.client.ClientRequest;
8 import org.springframework.web.reactive.function.client.ClientResponse;
9 import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
10 import org.springframework.web.reactive.function.client.ExchangeFunction;
11 import reactor.core.publisher.Mono;
12
13
14 /**
15  * An {@link ExchangeFilterFunction}
16  * @author Kai Moritz
17  */
18 public class GraphApiExchangeFilterFunction implements ExchangeFilterFunction
19 {
20   private static final Logger LOG =
21       LoggerFactory.getLogger(GraphApiExchangeFilterFunction.class);
22
23   public static GraphApiExchangeFilterFunction INSTANCE =
24       new GraphApiExchangeFilterFunction();
25
26
27   @Override
28   public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next)
29   {
30     return
31         next
32             .exchange(request)
33             .flatMap(response ->
34             {
35               return
36                   HttpStatus.Series.CLIENT_ERROR.equals(response.statusCode().series())
37                       ? response
38                           .bodyToMono(String.class)
39                           .flatMap(errorBody -> Mono.error(GraphApiException.create(
40                               response.statusCode(),
41                               response.headers().asHttpHeaders(),
42                               errorBody.getBytes())))
43                       : Mono.just(response);
44             });
45   }
46 }