Spec-Zone.ru › OpenJDK 25

Класс 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

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

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 — тип подписчика
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. кодировка, используемая для декодирования байтов тела ответа, получается из заголовков 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 функцией и разделителем строк. кодировка, используемая для декодирования байтов тела ответа, получается из заголовков 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 — тип подписчика
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). кодировка, используемая для декодирования байтов тела ответа, получается из заголовков 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, тело полностью записано в Consumer.

Примечание API:
Подписчик, возвращаемый этим обработчиком, не использует управление потоком. Поэтому предоставленный Consumer должен своевременно обрабатывать любой объем поступающих данных.
Параметры:
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>>, из которого можно получать байты тела ответа по мере их поступления. Подписаться на издателя можно и необходимо только один раз.

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

Чтобы обеспечить корректное освобождение всех ресурсов, связанных с соответствующим обменом данными, вызывающий код должен подписаться на издателя и соблюдать правила, изложенные в 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, 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/HttpResponse.BodyHandlers.html

Spec-Zone.ru

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