Armeria HTTP Client - 如何添加查询字符串参数
Armeria HTTP Client - how to add query string parameters
我搜索了一下,但找不到可以优雅地执行此操作的“Armeria API”。我对 Netty 比较熟悉,所以暂时使用 QueryStringEncoder
。有一个更好的方法吗 ?这里我有一个动态的 Map
参数,我需要以编程方式构建 HTTP 客户端。 Armeria WebClient
和 RequestHeaders
构建器提供了添加 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
有用。
我搜索了一下,但找不到可以优雅地执行此操作的“Armeria API”。我对 Netty 比较熟悉,所以暂时使用 QueryStringEncoder
。有一个更好的方法吗 ?这里我有一个动态的 Map
参数,我需要以编程方式构建 HTTP 客户端。 Armeria WebClient
和 RequestHeaders
构建器提供了添加 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
有用。