HTTP-клиент Armeria - как добавить параметры строки запроса

Я немного искал, но не смог найти "Armeria API", чтобы сделать это элегантно. Я знаком с Netty, поэтому пока используюQueryStringEncoder. Есть лучший способ сделать это? Вот у меня динамическийMapпараметров, и мне нужно программно создать HTTP-клиент. АрмерияWebClient а также RequestHeaders построители предоставляют способы добавления заголовков и пути, но не параметров строки запроса.

    HttpMethod httpMethod = HttpMethod.valueOf('GET');
    String url = 'http://example.com'
    String path = '/foo';
    if (params != null) {
        QueryStringEncoder qse = new QueryStringEncoder(url + path);
        params.forEach((k, v) -> {
            if (v != null) {
                v.forEach(s -> qse.addParam(k, s));
            }
        });            
        try {
            URI uri = qse.toUri();
            path = path + "?" + uri.getRawQuery();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    WebClient webClient = WebClient.builder(url).decorator(new HttpClientLogger()).build();
    RequestHeadersBuilder rhb = RequestHeaders.builder(httpMethod, path);

1 ответ

Решение

Армерия имеет QueryParams для построения или анализа строки запроса:

// You don't really need a Map to build a QueryParams.
// See QueryParams.of() or QueryParamsBuilder.add() for more information.
Map<String, String> paramMap = ...;
QueryParams params =
    QueryParams.builder()
               .add(paramMap)
               .build();

WebClient client =
    WebClient.builder("http://example.com")
             .decorator(...)
             .build();

AggregatedHttpResponse res =
    client.get("/foo?" + params.toQueryString()).aggregate().join()

Вы также можете найти Cookie полезно.

Другие вопросы по тегам