Armeria HTTP Client - 如何添加查询字符串参数

Armeria HTTP Client - how to add query string parameters

我搜索了一下,但找不到可以优雅地执行此操作的“Armeria API”。我对 Netty 比较熟悉,所以暂时使用 QueryStringEncoder。有一个更好的方法吗 ?这里我有一个动态的 Map 参数,我需要以编程方式构建 HTTP 客户端。 Armeria WebClientRequestHeaders 构建器提供了添加 headers 和路径的方法,但不提供查询字符串参数。

    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);

Armeria 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 有用。