【问题标题】:How to POST array of strings with Java 11 HttpClient?如何使用 Java 11 HttpClient 发布字符串数组?
【发布时间】:2020-07-09 10:59:25
【问题描述】:

尝试调用一个接受两个 POST 参数的接口:

  • param1:字符串
  • param2:数组[字符串]

我尝试将Array<String> 仅作为字符串发布显然是幼稚的,但找不到更好的方法。使用 Java 11 本机 HttpClient 使用字符串数组发布参数的正确方法是什么?

public static HttpResponse<String> postRequest() throws IOException, InterruptedException {
    HttpClient httpClient = HttpClientSingleton.getInstance();

    Map<Object, Object> data = new HashMap<>();
    data.put("param1", "val1");
    data.put("param2", "[val21, val22, val23]");

    HttpRequest request = HttpRequest.newBuilder()
            .POST(ofFormData(data))
            .uri(URI.create("http://localhost:19990/test"))
            .build();
    return httpClient.send(request, HttpResponse.BodyHandlers.ofString());
}

public static HttpRequest.BodyPublisher ofFormData(Map<Object, Object> data) {
    var builder = new StringBuilder();
    for (Map.Entry<Object, Object> entry : data.entrySet()) {
        if (builder.length() > 0) {
            builder.append("&");
        }
        builder.append(URLEncoder.encode(entry.getKey().toString(), StandardCharsets.UTF_8));
        builder.append("=");
        builder.append(URLEncoder.encode(entry.getValue().toString(), StandardCharsets.UTF_8));
    }
    return HttpRequest.BodyPublishers.ofString(builder.toString());
}

【问题讨论】:

    标签: java java-11 java-http-client


    【解决方案1】:

    更简单的方法是,将所有值编码为 json,并在服务器端接收到数据后解析(解码)。干杯!

    【讨论】:

    • 谢谢你的回答,但我无法控制服务器端。
    猜你喜欢
    • 2013-02-17
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    相关资源
    最近更新 更多