Учитывая, что вы работаете с JDK-11 (наличие не жалованного пакета java.net.http
), используемые вами API изменились на BodyPublishers.ofString
и BodyHandlers.ofString
.Вы можете обновить их в своем коде как:
final HttpRequest request = HttpRequest.newBuilder(URI.create("https://hastebin.com/documents"))
.POST(HttpRequest.BodyPublishers.ofString(content)).build();
final HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
Примечание : API-интерфейсы были изменены так, как они были изначально разработаны, как во время модуля инкубатора в Java9,следовательно, вы можете найти документацию по предыдущим синтаксисам.
Дополнительно : Вот пример для запроса POST от openjdk.
Кроме того, как уже упоминалось в примере GET JSON , если вы хотите прочитать ответ как пользовательский объект, вы можете использовать пользовательский сопоставитель объектов как:
class UncheckedObjectMapper extends com.fasterxml.jackson.databind.ObjectMapper {
Map<String, String> readValue(String content) {
try {
return this.readValue(content, new com.fasterxml.jackson.core.type.TypeReference() {
});
} catch (IOException ioe) {
throw new CompletionException(ioe);
}
}
}
, а затем прочитайте ваш ответ как
final HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
Map<String, String> mappedResponse = new UncheckedObjectMapper().readValue(response.body());
Для разрешения вышеуказанных полных имен классов вам понадобятся зависимости свыше jackson-databind
и jackson-core
артефакты.
Примечание : вы можете использовать readValue
в более общей реализации для возврата пользовательского типа объекта.