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
полезно.