How can I put query params into all requests in spring webflux avoiding code duplication in all places where I open http connection?
I try to make a configuration for a WebClient bean with a filter that should put a query param in URL every time when I do http call but I cannot find a way how to do it. Is it possible?
Configuration class:
@Configuration
public class IConnectionConfiguration {
@Value("${api.key}")
private String apiKey;
@Value("${api.url}")
private String url;
@Bean
public WebClient webClient(@Autowired ExchangeFilterFunction tokenFilter) {
return WebClient.builder().baseUrl(url)
.filters(exchangeFilterFunctions -> {
exchangeFilterFunctions.add(tokenFilter);
})
.build();
}
@Bean
public ExchangeFilterFunction tokenFilter() {
return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> {
//todo put token into request as a query param
return Mono.just(clientRequest);
});
}
}
Api calls layer:
@Service
public class Client {
@Autowired
private WebClient client;
//todo test method
public void testConnection() {
String s = client.get()
.uri(uriBuilder ->
uriBuilder.path("/something/{val}/something")
//todo line which I'm trying to avoid
//.queryParam("token", "token_value")
.build("123-test"))
.retrieve()
.bodyToMono(String.class)
.block();
System.out.println(s);
}
}