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