Как отправить массив строк с помощью Java 11 HttpClient? - PullRequest
0 голосов
/ 09 июля 2020

Попытка вызвать интерфейс, который принимает два параметра POST:

  • param1: string
  • param2: Array [string]

Моя попытка post Array<String> as просто 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());
}

1 Ответ

0 голосов
/ 10 июля 2020

Более простой способ - закодировать все значения как json и проанализировать (декодировать), как только вы получите данные на стороне сервера. Ура!

...