Как передать переменную пути по именам в веб-клиенте при загрузке Spring? - PullRequest
0 голосов
/ 16 июня 2020

Я хочу передать переменную пути, используя имя в веб-клиенте. Я мог бы передать параметр запроса по паре значений ключа, но как передать переменную пути.

Для параметра запроса мы можем сделать это, передав пару значений ключа

 this.webClient.get()
  .uri(uriBuilder - > uriBuilder
    .path("/products/")
    .queryParam("name", "AndroidPhone")
    .queryParam("color", "black")
    .queryParam("deliveryDate", "13/04/2019")
    .build())
  .retrieve();

Для переменной пути мы можно сделать это, передав значение

this.webClient.get()
  .uri(uriBuilder - > uriBuilder
    .path("/products/{id}/attributes/{attributeId}")
    .build(2, 13))
  .retrieve();

Я хочу, как показано ниже

this.webClient.get()
  .uri(uriBuilder - > uriBuilder
    .path("/products/{id}/attributes/{attributeId}/")
    .pathParam("attributeId", "AIPP-126")
    .pathParam("id", "5254136")
    .build())
  .retrieve();

Ответы [ 3 ]

1 голос
/ 16 июня 2020

Это дизайнерское решение .

Почему такая конструкция существует для queryParam, но не для pathParam?

В случае параметра запроса порядок, в котором любой параметр запроса присутствует в uri, не соответствует ' t имеет значение, и объявления (и присвоения значения) .queryParam("name", "AndroidPhone") только один раз в URIBuilder достаточно.

Тогда как в случае path param порядок, в котором любые или разные параметры пути появляются в uri:

Ваше предложение заставляет объявлять любые pathParam подобные attributeId в точном относительном положении в URI один раз и присваивать значение для этого attributeId отдельно, что требует Пользователь должен представить правильный текст attributeId ввести всего дважды.

Вместо всего этого, URIBuilder имеет конструкцию только для объявления всех path params только один раз при объявлении и передаче всех их значений с помощью .build(..) в последовательном порядке.

0 голосов
/ 17 июня 2020

Спасибо @boobalan @puce. Согласен с дизайнерским решением. Но моя цель - передать параметры пути по имени. Я мог передать оба параметра пути / запроса один раз, и это сработает.

String url = "http://localhost:8000/{id}/{name}/{id}/{name}?param1={id}&param2={cost}";
        Map<String, String> params = new HashMap<>();
        params.put("id", "123");
        params.put("name","Prabhu");
        params.put("cost","35.26");

        WebClient.create().method(HttpMethod.GET)
        .uri(url, params).retrieve();

Конечный URL-адрес http://localhost: 8000/123 / Prabhu / 123 / Prabhu? Param1 = 123¶m2 = 35,26

0 голосов
/ 16 июня 2020

В дополнение к anwser @ boobalan, самый простой способ для упомянутого случая:

   webClient.get()
    .uri("/products/{id}/attributes/{attributeId}", 2, 13)
    .retrieve();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...