【发布时间】:2021-06-22 16:47:14
【问题描述】:
如何将查询参数放入 spring webflux 中的所有请求中,避免在我打开 http 连接的所有地方重复代码?
我尝试使用过滤器为 WebClient bean 进行配置,该过滤器应该在每次进行 http 调用时在 URL 中放置一个查询参数,但我找不到如何做到这一点的方法。有可能吗?
配置类:
@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 调用层:
@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);
}
}
【问题讨论】:
标签: java spring spring-webflux