Попытка вызвать интерфейс, который принимает два параметра 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());
}