【问题标题】:How to add parameters to java.net.http.HttpClient GET request?如何向 java.net.http.HttpClient GET 请求添加参数?
【发布时间】:2021-04-12 11:00:20
【问题描述】:

我们找到了以下示例,它有效:

import java.net.http.HttpClient;
:
private static final HttpClient httpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1)
        .connectTimeout(Duration.ofSeconds(TIMEOUT)).build();
:
public String getStuff(HashMap<String,String> params) {
    HttpRequest request = HttpRequest.newBuilder().GET().uri(URI.create("https://httpbin.org/get"))
            .setHeader("User-Agent", "My Agent v1.0")
            .build();
    
    HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
   return response.body();
}

问题是我们如何将参数放入请求中?我们可以通过字符串操作手动将它们放入 URI 中,但这不适用于 POST。

我们希望有一个类似于 setHeader 的 setParameter 方法,但这并不存在(至少根据 eclipse)。

现在我是手动做的:

    String uri = "http://Somesite.com/somepath";
    if (params != null) {
        uri += "?";
        for (String key : params.keySet()) {
            uri += "" + key + "=" + params.get(key);
          }
    }

    HttpRequest request = HttpRequest.newBuilder().GET().uri(URI.create(uri))
            .setHeader("User-Agent", agent)
            .build();

大概对于 POST 来说,我必须手动构造一个带有 post params 结构的主体。

【问题讨论】:

  • 感谢您的回复。您包含的链接都是帖子,而不是 GET。我需要设置获取参数。我可以手动将它们一个一个地添加到 URL 字符串中,进行所需的编码,但这很乏味,我假设有一种方法可以做到这一点?
  • 转到第二个链接并稍微向下滚动
  • 使用 URIBuilder:baeldung.com/…
  • 不幸的是,URIBuilder 是 apache HTTP 库,而不是内置的 java 11。我们不能使用 apache,因为如果将其作为 maven 依赖项包含在内,它会破坏 AEM。

标签: java rest httpclient java-http-client


【解决方案1】:

使用javax.ws.rs.core.UriBuilder 它有queryParam 方法。 例如:

UriBuilder.fromLink( Link.fromUri( "somehost" ).build() )
            .path( API_SERVICES )
            .queryParam( "path", path)
            .queryParam( "method", method )
            .build();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    相关资源
    最近更新 更多