Spec-Zone.ru › OpenJDK 24

Класс 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 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)
Возвращает обработчик тела ответа, который возвращает заданное значение замены после игнорирования тела ответа.

Методы, объявленные в классе java.lang.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 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. charset, используемый для декодирования байтов тела ответа, берётся из заголовков HTTP-ответа, как указано в ofString(), а строки разделяются по способу BufferedReader.readLine().

Тело ответа недоступно через этот или 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 - тип подписчика
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 - файл для хранения тела
Возвращает:
обработчик тела ответа
END_OF_DOCUMENT_MARKER

ofFileЗагрузка

public static HttpResponse.BodyHandler<Path> ofFileDownload(Path directory, OpenOption... openOptions)
Возвращает BodyHandler<Path>, который возвращает BodySubscriber<Path>, где каталог загрузки указан, но имя файла извлекается из Content-Disposition заголовка ответа. Content-Disposition заголовок должен указывать тип вложения и также должен содержать параметр 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() для получения дополнительной информации.

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

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

ofСтроки

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

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

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

ofПотребительБайтов

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

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

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

ofМассивБайтов

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

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

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

ofСтрока

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

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

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

ofИздатель

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()

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

буферизация

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

© 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://download.java.net/java/early_access/jdk24/docs/api/java.net.http/java/net/http/HttpResponse.BodyHandlers.html

Spec-Zone.ru

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