Spec-Zone.ru › OpenJDK 27

Класс HttpResponse.BodyHandlers

java.lang.Object
java.net.http.HttpResponse.BodyHandlers
Охватывающий интерфейс:
HttpResponse<T>
public static class HttpResponse.BodyHandlers extends Object
Реализации BodyHandler, предоставляющие различные полезные обработчики, например обработку тела ответа как строки или потоковую запись тела ответа в файл.

Эти реализации не проверяют код состояния, то есть тело всегда принимается. Обычно они возвращают одноимённый BodySubscriber. Также можно использовать пользовательский обработчик для проверки кода состояния и заголовков, который при необходимости вернёт другой подписчик тела того же типа.

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

// Receives the response body as a String
HttpResponse<String> response = client
  .send(request, BodyHandlers.ofString());
// Receives the response body as a file
HttpResponse<Path> response = client
  .send(request, BodyHandlers.ofFile(Paths.get("example.html")));
// Receives the response body as an InputStream
HttpResponse<InputStream> response = client
  .send(request, BodyHandlers.ofInputStream());
// Discards the response body
HttpResponse<Void> response = client
  .send(request, BodyHandlers.discarding());
Примечание к API:
Некоторые реализации тела, созданные подписчиками тела, могут потребовать корректного закрытия, чтения или отмены, чтобы связанные ресурсы были освобождены, а соответствующий запрос был выполнен до конца.
С версии:
11

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

Модификатор и тип Метод Описание
static <T> HttpResponse.BodyHandler<T> buffering(HttpResponse.BodyHandler<T> downstreamHandler, int bufferSize)
Возвращает BodyHandler, который при вызове возвращает буферизующий BodySubscriber, накапливающий данные в буфере перед передачей подписчику следующего уровня.
static HttpResponse.BodyHandler<Void> discarding()
Возвращает обработчик тела ответа, отбрасывающий тело ответа.
static HttpResponse.BodyHandler<Void> fromLineSubscriber(Flow.Subscriber<? super String> subscriber)
Возвращает обработчик тела ответа, который возвращает BodySubscriber<Void>, полученный из BodySubscribers.fromLineSubscriber(subscriber, s -> null, charset, null), с заданным subscriber.
static <S extends Flow.Subscriber<? super String>, T>
HttpResponse.BodyHandler<T>
fromLineSubscriber(S subscriber, Function<? super S, ? extends T> finisher, String lineSeparator)
Возвращает обработчик тела ответа, который возвращает BodySubscriber<T>, полученный из BodySubscribers.fromLineSubscriber(subscriber, finisher, charset, lineSeparator), с заданным subscriber, функцией finisher и разделителем строк.
static HttpResponse.BodyHandler<Void> fromSubscriber(Flow.Subscriber<? super List<ByteBuffer>> subscriber)
Возвращает обработчик тела ответа, который возвращает BodySubscriber<Void>, полученный из HttpResponse.BodySubscribers.fromSubscriber(Subscriber), с заданным subscriber.
static <S extends Flow.Subscriber<? super List<ByteBuffer>>, T>
HttpResponse.BodyHandler<T>
fromSubscriber(S subscriber, Function<? super S, ? extends T> finisher)
Возвращает обработчик тела ответа, который возвращает BodySubscriber<T>, полученный из HttpResponse.BodySubscribers.fromSubscriber(Subscriber, Function), с заданным subscriber и функцией finisher.
static <T> HttpResponse.BodyHandler<T> limiting(HttpResponse.BodyHandler<T> downstreamHandler, long capacity)
Возвращает BodyHandler, ограничивающий количество байтов тела, передаваемых заданному downstreamHandler.
static HttpResponse.BodyHandler<byte[]> ofByteArray()
Возвращает BodyHandler<byte[]>, который возвращает BodySubscriber<byte[]>, полученный из BodySubscribers.ofByteArray().
static HttpResponse.BodyHandler<Void> ofByteArrayConsumer(Consumer<Optional<byte[]>> consumer)
Возвращает BodyHandler<Void>, который возвращает BodySubscriber<Void>, полученный из BodySubscribers.ofByteArrayConsumer(Consumer).
static HttpResponse.BodyHandler<Path> ofFile(Path file)
Возвращает BodyHandler<Path>, который возвращает BodySubscriber<Path>.
static HttpResponse.BodyHandler<Path> ofFile(Path file, OpenOption... openOptions)
Возвращает BodyHandler<Path>, который возвращает BodySubscriber<Path>, полученный из BodySubscribers.ofFile(Path,OpenOption...).
static HttpResponse.BodyHandler<Path> ofFileDownload(Path directory, OpenOption... openOptions)
Возвращает BodyHandler<Path>, который возвращает BodySubscriber<Path>, при этом задаётся каталог для загрузки, а имя файла берётся из заголовка ответа Content-Disposition.
static HttpResponse.BodyHandler<InputStream> ofInputStream()
Возвращает BodyHandler<InputStream>, который возвращает BodySubscriber<InputStream>, полученный из BodySubscribers.ofInputStream.
static HttpResponse.BodyHandler<Stream<String>> ofLines()
Возвращает BodyHandler<Stream<String>>, который возвращает BodySubscriber<Stream<String>>, полученный из BodySubscribers.ofLines(charset).
static HttpResponse.BodyHandler<Flow.Publisher<List<ByteBuffer>>> ofPublisher()
Возвращает BodyHandler<Publisher<List<ByteBuffer>>>, создающий BodySubscriber<Publisher<List<ByteBuffer>>>, полученный из BodySubscribers.ofPublisher().
static HttpResponse.BodyHandler<String> ofString()
Возвращает BodyHandler<String>, который возвращает BodySubscriber<String>, полученный из BodySubscribers.ofString(Charset).
static HttpResponse.BodyHandler<String> ofString(Charset charset)
Возвращает BodyHandler<String>, который возвращает BodySubscriber<String>, полученный из BodySubscribers.ofString(Charset).
static <U> HttpResponse.BodyHandler<U> replacing(U value)
Возвращает обработчик тела ответа, который возвращает заданное значение-замену после отбрасывания тела ответа.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, является ли другой объект «равным» этому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии.
Финализация объявлена устаревшей и может быть удалена в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

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

fromSubscriber

public static HttpResponse.BodyHandler<Void> fromSubscriber(Flow.Subscriber<? super List<ByteBuffer>> subscriber)
Возвращает обработчик тела ответа, который возвращает BodySubscriber<Void>, полученный из HttpResponse.BodySubscribers.fromSubscriber(Subscriber), с заданным subscriber.

Тело ответа недоступно через этот API или API HttpResponse; вместо этого всё тело ответа передаётся указанному subscriber, который должен обеспечить его доступность, если это уместно, с помощью какого-либо другого механизма, например записи в базе данных и т. д.

Примечание к API:
Этот метод можно использовать в качестве адаптера между BodySubscriber и Flow.Subscriber.

Например:

TextSubscriber subscriber = new TextSubscriber();
HttpResponse<Void> response = client.sendAsync(request,
    BodyHandlers.fromSubscriber(subscriber)).join();
System.out.println(response.statusCode());
Параметры:
subscriber — подписчик
Возвращает:
обработчик тела ответа

fromSubscriber

public static <S extends Flow.Subscriber<? super List<ByteBuffer>>, T> HttpResponse.BodyHandler<T> fromSubscriber(S subscriber, Function<? super S, ? extends T> finisher)
Возвращает обработчик тела ответа, который возвращает BodySubscriber<T>, полученный из HttpResponse.BodySubscribers.fromSubscriber(Subscriber, Function), с заданным subscriber и функцией finisher.

Указанная функция finisher применяется после вызова onComplete заданного подписчика. Функция finisher вызывается с указанным подписчиком и возвращает значение, которое устанавливается в качестве тела ответа.

Примечание к API:
Этот метод можно использовать в качестве адаптера между BodySubscriber и Flow.Subscriber.

Например:

TextSubscriber subscriber = ...;  // accumulates bytes and transforms them into a String
HttpResponse<String> response = client.sendAsync(request,
    BodyHandlers.fromSubscriber(subscriber, TextSubscriber::getTextResult)).join();
String text = response.body();
Параметры типа:
S — тип Subscriber
T — тип тела ответа
Параметры:
subscriber — подписчик
finisher — функция, применяемая после завершения работы подписчика
Возвращает:
обработчик тела ответа

fromLineSubscriber

public static HttpResponse.BodyHandler<Void> fromLineSubscriber(Flow.Subscriber<? super String> subscriber)
Возвращает обработчик тела ответа, который возвращает BodySubscriber<Void>, полученный из BodySubscribers.fromLineSubscriber(subscriber, s -> null, charset, null), с указанным subscriber. Набор символов charset, используемый для декодирования байтов тела ответа, берётся из заголовков HTTP-ответа, как указано в ofString(); строки разделяются так же, как в BufferedReader.readLine().

Тело ответа недоступно через этот API или API HttpResponse; вместо этого всё тело ответа передаётся указанному subscriber, который должен обеспечить его доступность, если это уместно, с помощью какого-либо другого механизма, например записи в базе данных и т. д.

Примечание к API:
Этот метод можно использовать в качестве адаптера между BodySubscriber и текстовым Flow.Subscriber, которое анализирует текст построчно.

Например:

// A PrintSubscriber that implements Flow.Subscriber<String>
// and print lines received by onNext() on System.out
PrintSubscriber subscriber = new PrintSubscriber(System.out);
client.sendAsync(request, BodyHandlers.fromLineSubscriber(subscriber))
    .thenApply(HttpResponse::statusCode)
    .thenAccept((status) -> {
        if (status != 200) {
            System.err.printf("ERROR: %d status received%n", status);
        }
    });
Параметры:
subscriber — подписчик
Возвращает:
обработчик тела ответа

fromLineSubscriber

public static <S extends Flow.Subscriber<? super String>, T> HttpResponse.BodyHandler<T> fromLineSubscriber(S subscriber, Function<? super S, ? extends T> finisher, String lineSeparator)
Возвращает обработчик тела ответа, который возвращает BodySubscriber<T>, полученный из BodySubscribers.fromLineSubscriber(subscriber, finisher, charset, lineSeparator), с указанным subscriber, функцией finisher и разделителем строк. Набор символов charset, используемый для декодирования байтов тела ответа, берётся из заголовков HTTP-ответа, как указано в ofString().

Указанная функция finisher применяется после вызова onComplete заданного подписчика. Функция finisher вызывается с указанным подписчиком и возвращает значение, которое устанавливается в качестве тела ответа.

Примечание к API:
Этот метод можно использовать в качестве адаптера между BodySubscriber и текстовым Flow.Subscriber, которое анализирует текст построчно.

Например:

// A LineParserSubscriber that implements Flow.Subscriber<String>
// and accumulates lines that match a particular pattern
Pattern pattern = ...;
LineParserSubscriber subscriber = new LineParserSubscriber(pattern);
HttpResponse<List<String>> response = client.send(request,
    BodyHandlers.fromLineSubscriber(subscriber, s -> s.getMatchingLines(), "\n"));
if (response.statusCode() != 200) {
    System.err.printf("ERROR: %d status received%n", response.statusCode());
}
Параметры типа:
S — тип Subscriber
T — тип тела ответа
Параметры:
subscriber — подписчик
finisher — функция, применяемая после завершения работы подписчика
lineSeparator — необязательный разделитель строк: может быть null; в этом случае строки разделяются так же, как в BufferedReader.readLine().
Возвращает:
обработчик тела ответа
Выбрасывает:
IllegalArgumentException — если указанный lineSeparator является пустой строкой

discarding

public static HttpResponse.BodyHandler<Void> discarding()
Возвращает обработчик тела ответа, который отбрасывает тело ответа.
Возвращает:
обработчик тела ответа

replacing

public static <U> HttpResponse.BodyHandler<U> replacing(U value)
Возвращает обработчик тела ответа, который возвращает заданное значение-замену после отбрасывания тела ответа.
Параметры типа:
U — тип тела ответа
Параметры:
value — значение U, возвращаемое в качестве тела ответа; может быть null
Возвращает:
обработчик тела ответа

ofString

public static HttpResponse.BodyHandler<String> ofString(Charset charset)
Возвращает BodyHandler<String>, который возвращает BodySubscriber<String>, полученный из BodySubscribers.ofString(Charset). Тело декодируется с использованием заданной кодировки.
Параметры:
charset — кодировка, используемая для преобразования тела
Возвращает:
обработчик тела ответа

ofFile

public static HttpResponse.BodyHandler<Path> ofFile(Path file, OpenOption... openOptions)
Возвращает BodyHandler<Path>, который возвращает BodySubscriber<Path>, полученный из BodySubscribers.ofFile(Path,OpenOption...).

Когда возвращается объект HttpResponse, тело уже полностью записано в файл, а HttpResponse.body() возвращает ссылку на его Path.

Параметры:
file — файл для сохранения тела
openOptions — параметры, используемые при открытии/создании файла
Возвращает:
обработчик тела ответа
Выбрасывает:
IllegalArgumentException — если указан недопустимый набор параметров открытия

ofFile

public static HttpResponse.BodyHandler<Path> ofFile(Path file)
Возвращает BodyHandler<Path>, который возвращает BodySubscriber<Path>.

Эквивалентно: ofFile(file, CREATE, WRITE)

Параметры:
file — файл для сохранения тела
Возвращает:
обработчик тела ответа

ofFileDownload

public static HttpResponse.BodyHandler<Path> ofFileDownload(Path directory, OpenOption... openOptions)
Возвращает BodyHandler<Path>, который возвращает BodySubscriber<Path>, для которого задан каталог загрузки, а имя файла берётся из заголовка ответа Content-Disposition. Заголовок Content-Disposition должен указывать тип attachment и также содержать параметр filename. Если имя файла содержит несколько компонентов пути, в качестве имени файла используется только последний компонент (вместе с заданным именем каталога).

Когда возвращается объект HttpResponse, тело уже полностью записано в файл, а HttpResponse.body() возвращает объект Path для файла. Возвращаемый Path — это сочетание заданного имени каталога и имени файла, указанного сервером. Если целевой каталог не существует или в него нельзя записывать, ответ завершится ошибкой IOException.

Параметры:
directory — каталог для сохранения файла
openOptions — параметры открытия, используемые при открытии файла
Возвращает:
обработчик тела ответа
Выбрасывает:
IllegalArgumentException — если указанный путь не существует, не относится к файловой системе по умолчанию, не является каталогом, недоступен для записи или указан недопустимый набор параметров открытия

ofInputStream

public static HttpResponse.BodyHandler<InputStream> ofInputStream()
Возвращает BodyHandler<InputStream>, который возвращает BodySubscriber<InputStream>, полученный из BodySubscribers.ofInputStream.

Когда возвращается объект HttpResponse, заголовки ответа уже полностью прочитаны, но тело может быть ещё получено не полностью. Метод HttpResponse.body() возвращает InputStream, из которого можно читать тело по мере его получения.

Примечание к API:
Дополнительные сведения см. в разделе HttpResponse.BodySubscribers.ofInputStream().

Чтобы обеспечить надлежащее освобождение всех ресурсов, связанных с соответствующим обменом, вызывающий код должен получить и закрыть возвращённый поток.

Возвращает:
обработчик тела ответа с потоковой передачей

ofLines

public static HttpResponse.BodyHandler<Stream<String>> ofLines()
Возвращает BodyHandler<Stream<String>>, который возвращает BodySubscriber<Stream<String>>, полученный из BodySubscribers.ofLines(charset). Набор символов charset, используемый для декодирования байтов тела ответа, берётся из заголовков HTTP-ответа, как указано в ofString(); строки разделяются так же, как в BufferedReader.readLine().

Когда возвращается объект HttpResponse, тело может быть ещё получено не полностью.

Примечание к API:
Чтобы обеспечить надлежащее освобождение всех ресурсов, связанных с соответствующим обменом, вызывающий код должен получить и закрыть возвращённый поток.
Возвращает:
обработчик тела ответа с потоковой передачей

ofByteArrayConsumer

public static HttpResponse.BodyHandler<Void> ofByteArrayConsumer(Consumer<Optional<byte[]>> consumer)
Возвращает BodyHandler<Void>, который возвращает BodySubscriber<Void>, полученный из BodySubscribers.ofByteArrayConsumer(Consumer).

Когда возвращается объект HttpResponse, тело уже полностью записано в потребитель.

Примечание к API:
Подписчик, возвращаемый этим обработчиком, не управляет потоком данных. Поэтому указанный потребитель должен своевременно обрабатывать любой объём поступающих данных.
Параметры:
consumer — Consumer, принимающий тело ответа
Возвращает:
обработчик тела ответа

ofByteArray

public static HttpResponse.BodyHandler<byte[]> ofByteArray()
Возвращает BodyHandler<byte[]>, который возвращает BodySubscriber<byte[]>, полученный из BodySubscribers.ofByteArray().

Когда возвращается объект HttpResponse, тело уже полностью записано в массив байтов.

Возвращает:
обработчик тела ответа

ofString

public static HttpResponse.BodyHandler<String> ofString()
Возвращает BodyHandler<String>, который возвращает BodySubscriber<String>, полученный из BodySubscribers.ofString(Charset). Тело декодируется с использованием набора символов, указанного в заголовке ответа Content-Type. Если такого заголовка нет или указанный набор символов не поддерживается, используется UTF_8.

Когда возвращается объект HttpResponse, тело уже полностью записано в строку.

Возвращает:
обработчик тела ответа

ofPublisher

public static HttpResponse.BodyHandler<Flow.Publisher<List<ByteBuffer>>> ofPublisher()
Возвращает BodyHandler<Publisher<List<ByteBuffer>>>, который создаёт BodySubscriber<Publisher<List<ByteBuffer>>>, полученный из BodySubscribers.ofPublisher().

Когда возвращается объект HttpResponse, заголовки ответа уже полностью прочитаны, но тело может быть ещё получено не полностью. Метод HttpResponse.body() возвращает Publisher<List<ByteBuffer>>, из которого можно получать байты тела ответа по мере их поступления. Подписаться на publisher можно и необходимо только один раз.

Примечание к API:
Дополнительные сведения см. в разделе HttpResponse.BodySubscribers.ofPublisher().

Чтобы обеспечить надлежащее освобождение всех ресурсов, связанных с соответствующим обменом, вызывающий код должен подписаться на publisher и соблюдать правила, изложенные в HttpResponse.BodySubscribers.ofPublisher()

Возвращает:
обработчик тела ответа с публикацией

buffering

public static <T> HttpResponse.BodyHandler<T> buffering(HttpResponse.BodyHandler<T> downstreamHandler, int bufferSize)
Возвращает BodyHandler, который при вызове возвращает BodySubscriber с буферизацией, буферизующий данные перед их передачей нижестоящему подписчику. Эти экземпляры BodySubscriber создаются вызовом BodySubscribers.buffering с подписчиком, полученным от указанного нижестоящего обработчика, и параметром bufferSize.
Параметры типа:
T — тип тела ответа
Параметры:
downstreamHandler — нижестоящий обработчик
bufferSize — параметр размера буфера, передаваемый в BodySubscribers.buffering
Возвращает:
обработчик тела ответа
Выбрасывает:
IllegalArgumentException — если bufferSize <= 0

limiting

public static <T> HttpResponse.BodyHandler<T> limiting(HttpResponse.BodyHandler<T> downstreamHandler, long capacity)
Возвращает BodyHandler, ограничивающий количество байтов тела, передаваемых указанному downstreamHandler.

Если количество полученных байтов тела превышает заданное capacity, для нижестоящего BodySubscriber вызывается onError с IOException, указывающим на превышение лимита, а восходящая подписка отменяется.

Параметры:
downstreamHandler — нижестоящий обработчик, которому передаются полученные данные
capacity — максимально допустимое количество байтов
Возвращает:
BodyHandler, ограничивающий количество байтов тела, передаваемых указанному downstreamHandler
Выбрасывает:
IllegalArgumentException — если capacity отрицательно
Начиная с версии:
25

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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