1 package de.juplo.facebook.errors;
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 org.springframework.web.reactive.function.client.WebClientResponseException;
10 import reactor.core.publisher.Mono;
14 * An {@link ExchangeFilterFunction}
17 public class GraphApiExchangeFilterFunction implements ExchangeFilterFunction
20 public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next)
28 HttpStatus.Series.CLIENT_ERROR.equals(response.statusCode().series())
30 .bodyToMono(String.class)
31 .map(errorBody -> GraphApiException.create(
32 response.statusCode(),
33 response.headers().asHttpHeaders(),
34 errorBody.getBytes()))
36 e.getClass().equals(ErrorResponseParsingErrorException.class)
37 ? WebClientResponseException
39 e.getStatus().value(),
40 e.getStatus().getReasonPhrase(),
45 .flatMap(e -> Mono.error(e))
46 : Mono.just(response);