В моем сервисе я должен получить ответ от нескольких разных URL с параметрами.
- получить от http://a.com: 8080 / path1? Param1 = v1
- получить от http://b.com: 8080 / path2? Param2 = v2
- получить от http://c.com: 8080 / path3? Param3 = v3
Я использую WebClient для выполнения работы следующим образом.
public class WebClientTest {
private WebClient webClient = WebClient.builder().build();
@Test
public void webClientTest() {
Mono<String> a = webClient.get()
.uri(uriBuilder -> uriBuilder.scheme("http").host("a.com").port(8080).path("/path1")
.queryParam("param1", "v1")
.build())
.retrieve()
.bodyToMono(String.class);
Mono<String> b = webClient.get()
.uri(uriBuilder -> uriBuilder.scheme("http").host("b.com").port(8080).path("/path2")
.queryParam("param2", "v2")
.build())
.retrieve()
.bodyToMono(String.class);
Mono<String> c = webClient.get()
.uri(uriBuilder -> uriBuilder.scheme("http").host("c.com").port(8080).path("/path3")
.queryParam("param3", "v3")
.build())
.retrieve()
.bodyToMono(String.class);
//zip the result
}
}
Как видите, я должен снова и снова устанавливать схему, хост, порт отдельно.
Поэтому у меня следующие вопросы:
1. Правильно ли я использую WebClient?
2. Можно ли совместно указать схему, хост, порт в методе? Я знаю, что webClient.get().uri("http://a.com:8080/path1?param1=v1").retrieve()
работает, но я ожидаю что-то вроде:
webClient.get()
.uri(uriBuilder -> uriBuilder/*.url("http://a.com:8080/path1")*/
.queryParam("param1", "v1")
.build())
.retrieve()
.bodyToMono(String.class);