Класс 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 |
Возвращает BodyPublisher, который публикует тело запроса, состоящее из конкатенации тел запросов, публикуемых последовательностью поставщиков. |
static HttpRequest.BodyPublisher |
fromPublisher |
Возвращает поставщик тела запроса, тело которого извлекается из указанного Flow.Publisher. |
static HttpRequest.BodyPublisher |
fromPublisher |
Возвращает поставщик тела запроса, тело которого извлекается из указанного Flow.Publisher. |
static HttpRequest.BodyPublisher |
noBody() |
Поставщик тела запроса, который не отправляет тело запроса. |
static HttpRequest.BodyPublisher |
ofByteArray |
Возвращает поставщик тела запроса, телом которого является указанный массив байтов. |
static HttpRequest.BodyPublisher |
ofByteArray |
Возвращает поставщик тела запроса, телом которого является содержимое указанного массива байтов размером length байт, начиная с указанного offset. |
static HttpRequest.BodyPublisher |
ofByteArrays |
Поставщик тела запроса, который получает данные из Iterable массивов байтов. |
static HttpRequest.BodyPublisher |
ofFile |
Поставщик тела запроса, который получает данные из содержимого файла. |
static HttpRequest.BodyPublisher |
ofFileChannel |
Возвращает поставщик тела запроса, телом которого являются length байты содержимого, считанные из предоставленного файла channel, начиная с указанного offset. |
static HttpRequest.BodyPublisher |
ofInputStream |
Поставщик тела запроса, считывающий данные из InputStream. |
static HttpRequest.BodyPublisher |
ofString |
Возвращает поставщик тела запроса, телом которого является указанная
String, преобразованная с использованием кодировки UTF_8. |
static HttpRequest.BodyPublisher |
ofString |
Возвращает поставщик тела запроса, телом которого является указанная
String, преобразованная с использованием указанной кодировки. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Показывает, равен ли другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и может быть удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания, либо истечения заданного интервала реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания, либо истечения заданного интервала реального времени. |
Подробное описание методов
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— если файл по указанному пути не найден
ofFileChannel
public static HttpRequest.BodyPublisher ofFileChannel(FileChannel channel, long offset, long length) throws IOException
length байты содержимого, считанные из предоставленного файлового channel, начиная с указанного offset. Этот метод и возвращённый BodyPublisher не изменяют позицию channel и не закрывают channel. Предполагается, что вызывающий код закроет channel, когда он больше не понадобится.
- Примечание API:
- Этот метод можно использовать для публикации в качестве тела запроса только части файла или для одновременной публикации разных частей файла. Типичный вариант использования — публикация разных частей файла путём создания одного экземпляра
FileChannel, а затем отправки нескольких параллельныхHttpRequest, каждый из которых использует новыйofFileChannel BodyPublisher, созданный из того же канала, с другим, обычно не перекрывающимся диапазоном байтов, заданным смещением и длиной. - Параметры:
-
channel— файловый канал -
offset— смещение первого байта -
length— количество байтов для чтения из файлового канала - Возвращает:
- поставщик тела запроса, телом которого являются
lengthбайты содержимого, считанные из предоставленного файловогоchannel, начиная с указанногоoffset - Вызывает:
-
IndexOutOfBoundsException— если указанный диапазон байтов выходит за допустимые границы относительно размера файла, на который ссылается канал -
IOException— если не удаётся определить размер канала илиchannelзакрыт - Начиная с:
- 26
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
© 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.