Spec-Zone.ru › OpenJDK 25

Класс HttpRequest.BodyPublishers

java.lang.Object
java.net.http.HttpRequest.BodyPublishers
Вмещающий класс:
HttpRequest
public static class HttpRequest.BodyPublishers extends Object
Реализации BodyPublisher, которые предоставляют различные полезные издатели, например издатели, публикующие тело запроса из строки или файла.

Ниже приведены примеры использования предопределённых издателей тела запроса для преобразования распространённых высокоуровневых объектов Java в поток данных, подходящий для отправки в качестве тела запроса:

// Request body from a String
HttpRequest request = HttpRequest.newBuilder()
     .uri(URI.create("https://foo.com/"))
     .header("Content-Type", "text/plain; charset=UTF-8")
     .POST(BodyPublishers.ofString("some body text"))
     .build();
// Request body from a File
HttpRequest request = HttpRequest.newBuilder()
     .uri(URI.create("https://foo.com/"))
     .header("Content-Type", "application/json")
     .POST(BodyPublishers.ofFile(Paths.get("file.json")))
     .build();
// Request body from a byte array
HttpRequest request = HttpRequest.newBuilder()
     .uri(URI.create("https://foo.com/"))
     .POST(BodyPublishers.ofByteArray(new byte[] { ... }))
     .build();
Начиная с:
11

Краткое описание методов

Модификатор и тип Метод Описание
static HttpRequest.BodyPublisher concat(HttpRequest.BodyPublisher... publishers)
Возвращает BodyPublisher, который публикует тело запроса, состоящее из объединённых тел запросов, публикуемых последовательностью издателей.
static HttpRequest.BodyPublisher fromPublisher(Flow.Publisher<? extends ByteBuffer> publisher)
Возвращает издатель тела запроса, тело которого извлекается из указанного Flow.Publisher.
static HttpRequest.BodyPublisher fromPublisher(Flow.Publisher<? extends ByteBuffer> publisher, long contentLength)
Возвращает издатель тела запроса, тело которого извлекается из указанного Flow.Publisher.
static HttpRequest.BodyPublisher noBody()
Издатель тела запроса, который не отправляет тело запроса.
static HttpRequest.BodyPublisher ofByteArray(byte[] buf)
Возвращает издатель тела запроса, телом которого является указанный массив байтов.
static HttpRequest.BodyPublisher ofByteArray(byte[] buf, int offset, int length)
Возвращает издатель тела запроса, телом которого является содержимое указанного массива байтов длиной length байт, начиная с указанного offset.
static HttpRequest.BodyPublisher ofByteArrays(Iterable<byte[]> iter)
Издатель тела запроса, который получает данные из Iterable массивов байтов.
static HttpRequest.BodyPublisher ofFile(Path path)
Издатель тела запроса, который получает данные из содержимого файла.
static HttpRequest.BodyPublisher ofInputStream(Supplier<? extends InputStream> streamSupplier)
Издатель тела запроса, который считывает данные из InputStream.
static HttpRequest.BodyPublisher ofString(String body)
Возвращает издатель тела запроса, телом которого является указанная String, преобразованная с использованием UTF_8.
static HttpRequest.BodyPublisher ofString(String s, Charset charset)
Возвращает издатель тела запроса, телом которого является указанная String, преобразованная с использованием указанной кодировки.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание методов

fromPublisher

public static HttpRequest.BodyPublisher fromPublisher(Flow.Publisher<? extends ByteBuffer> publisher)
Возвращает издатель тела запроса, тело которого извлекается из указанного Flow.Publisher. Длина содержимого возвращаемого издателя тела запроса неизвестна.
Примечание API:
Этот метод можно использовать в качестве адаптера между BodyPublisher и Flow.Publisher, когда размер тела запроса, которое будет публиковать издатель, неизвестен.
Параметры:
publisher — издатель, отвечающий за публикацию тела
Возвращает:
BodyPublisher

fromPublisher

public static HttpRequest.BodyPublisher fromPublisher(Flow.Publisher<? extends ByteBuffer> publisher, long contentLength)
Возвращает издатель тела запроса, тело которого извлекается из указанного Flow.Publisher. Длина содержимого возвращаемого издателя тела запроса задана.

Указанное contentLength — положительное число, представляющее точное количество байтов, которое должен опубликовать publisher.

Примечание API:
Этот метод можно использовать в качестве адаптера между BodyPublisher и Flow.Publisher, когда размер тела запроса, которое будет публиковать издатель, известен.
Параметры:
publisher — издатель, отвечающий за публикацию тела
contentLength — положительное число, представляющее точное количество байтов, которое опубликует издатель
Возвращает:
BodyPublisher
Вызывает:
IllegalArgumentException — если длина содержимого не является положительной

ofString

public static HttpRequest.BodyPublisher ofString(String body)
Возвращает издатель тела запроса, телом которого является указанная String, преобразованная с использованием UTF_8.
Параметры:
body — строка, содержащая тело
Возвращает:
BodyPublisher

ofString

public static HttpRequest.BodyPublisher ofString(String s, Charset charset)
Возвращает издатель тела запроса, телом которого является указанная String, преобразованная с использованием указанной кодировки.
Параметры:
s — строка, содержащая тело
charset — кодировка для преобразования строки в байты
Возвращает:
BodyPublisher

ofInputStream

public static HttpRequest.BodyPublisher ofInputStream(Supplier<? extends InputStream> streamSupplier)
Издатель тела запроса, который считывает данные из InputStream. Supplier типа InputStream используется на случай, если запрос нужно повторить, поскольку содержимое не буферизуется. При последующих попытках Supplier может возвращать null, и в этом случае запрос завершается с ошибкой.
Параметры:
streamSupplier — Supplier открытых InputStream
Возвращает:
BodyPublisher

ofByteArray

public static HttpRequest.BodyPublisher ofByteArray(byte[] buf)
Возвращает издатель тела запроса, телом которого является указанный массив байтов.
Параметры:
buf — массив байтов, содержащий тело
Возвращает:
BodyPublisher

ofByteArray

public static HttpRequest.BodyPublisher ofByteArray(byte[] buf, int offset, int length)
Возвращает издатель тела запроса, телом которого является содержимое указанного массива байтов длиной length байт, начиная с указанного offset.
Параметры:
buf — массив байтов, содержащий тело
offset — смещение первого байта
length — количество используемых байтов
Возвращает:
BodyPublisher
Вызывает:
IndexOutOfBoundsException — если заданный поддиапазон выходит за допустимые границы

ofFile

public static HttpRequest.BodyPublisher ofFile(Path path) throws FileNotFoundException
Издатель тела запроса, который получает данные из содержимого файла.
Параметры:
path — путь к файлу, содержащему тело
Возвращает:
BodyPublisher
Вызывает:
FileNotFoundException — если путь не найден

ofByteArrays

public static HttpRequest.BodyPublisher ofByteArrays(Iterable<byte[]> iter)
Издатель тела запроса, который получает данные из Iterable массивов байтов. Предоставляется Iterable, который выдаёт экземпляры Iterator. Каждая попытка отправить запрос приводит к одному вызову Iterable.
Параметры:
iter — Iterable массивов байтов
Возвращает:
BodyPublisher

noBody

public static HttpRequest.BodyPublisher noBody()
Издатель тела запроса, который не отправляет тело запроса.
Возвращает:
BodyPublisher, который немедленно завершается и не отправляет тело запроса.

concat

public static HttpRequest.BodyPublisher concat(HttpRequest.BodyPublisher... publishers)
Возвращает BodyPublisher, который публикует тело запроса, состоящее из объединённых тел запросов, публикуемых последовательностью издателей.

Если последовательность пуста, возвращается пустой издатель. Если последовательность содержит один элемент, возвращается этот издатель. В противном случае возвращается издатель объединения.

Тело запроса, публикуемое издателем объединения, логически эквивалентно телу запроса, которое было бы опубликовано при последовательном объединении всех байтов каждого издателя.

Подписка на каждый издатель выполняется поочерёдно и лениво, пока не будут опубликованы все байты тела, не произойдёт ошибка или не будет отменена подписка издателя объединения. На издателя объединения можно подписаться несколько раз, что, в свою очередь, может привести к многократной подписке на издателей из последовательности.

Длина содержимого издателя объединения известна, только если известна длина содержимого всех издателей в последовательности. Значение contentLength, сообщаемое издателем объединения, вычисляется следующим образом:

  • Если какой-либо издатель сообщает неизвестную длину содержимого или если сумма известных длин содержимого превышает Long.MAX_VALUE, итоговая длина содержимого считается неизвестной.
  • В противном случае итоговая длина содержимого равна сумме известных длин содержимого — числу в диапазоне от 0 до Long.MAX_VALUE включительно.
Примечание по реализации:
Если подписка издателя объединения отменена или при публикации байтов происходит ошибка, подписка может быть оформлена не на все издатели последовательности.
Параметры:
publishers — последовательность издателей.
Возвращает:
Составной издатель, который публикует тело запроса, логически эквивалентное объединению всех байтов, опубликованных каждым издателем последовательности.
Начиная с:
16

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, где приведены более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.net.http/java/net/http/HttpRequest.BodyPublishers.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API