Как установить базовый URL и параметры запроса для WebClient? - PullRequest
0 голосов
/ 15 января 2020

В моем сервисе я должен получить ответ от нескольких разных URL с параметрами.

  1. получить от http://a.com: 8080 / path1? Param1 = v1
  2. получить от http://b.com: 8080 / path2? Param2 = v2
  3. получить от 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);

1 Ответ

0 голосов
/ 12 марта 2020

Способ, которым я решил это, заключался в том, чтобы иметь WebClient для каждого отдельного URL.

Таким образом, у вас будет

   private WebClient aClient = WebClient.create("a.com")
   private WebClient bClient = WebClient.create("b.com")
   private WebClient cClient = WebClient.create("c.com")

Затем взаимодействуйте с каждым веб-клиентом в зависимости от того, что вы вызываете.

https://docs.spring.io/spring/docs/5.0.7.RELEASE/spring-framework-reference/web-reactive.html#webflux -client-retrieve

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...