Spec-Zone.ru › OpenJDK 21

Класс HttpResponse.BodySubscribers

java.lang.Object
java.net.http.HttpResponse.BodySubscribers
Вложенный интерфейс:
HttpResponse<T>
public static class HttpResponse.BodySubscribers extends Object
Реализации BodySubscriber, которые реализуют различные полезные подписчики, такие как преобразование байтов тела ответа в строку или потоковое передачу байтов в файл.

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

// Streams the response body to a File
HttpResponse<Path> response = client
  .send(request, responseInfo -> BodySubscribers.ofFile(Paths.get("example.html"));
// Accumulates the response body and returns it as a byte[]
HttpResponse<byte[]> response = client
  .send(request, responseInfo -> BodySubscribers.ofByteArray());
// Discards the response body
HttpResponse<Void> response = client
  .send(request, responseInfo -> BodySubscribers.discarding());
// Accumulates the response body as a String then maps it to its bytes
HttpResponse<byte[]> response = client
  .send(request, responseInfo ->
     BodySubscribers.mapping(BodySubscribers.ofString(UTF_8), String::getBytes));
С тех пор:
11

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

Модификатор и тип Метод Описание
static <T> HttpResponse.BodySubscriber<T> buffering(HttpResponse.BodySubscriber<T> downstream, int bufferSize)
Возвращает BodySubscriber, который буферизует данные перед передачей их заданному подписчику вниз по потоку.
static HttpResponse.BodySubscriber<Void> discarding()
Возвращает подписчика ответа, который игнорирует тело ответа.
static HttpResponse.BodySubscriber<Void> fromLineSubscriber(Flow.Subscriber<? super String> subscriber)
Возвращает подписчика тела, который пересылает всё тело ответа в предоставленный Flow.Subscriber, построчно.
static <S extends Flow.Subscriber<? super String>, T>
HttpResponse.BodySubscriber<T>
fromLineSubscriber(S subscriber, Function<? super S,? extends T> finisher, Charset charset, String lineSeparator)
Возвращает подписчика тела, который пересылает всё тело ответа в предоставленный Flow.Subscriber, построчно.
static HttpResponse.BodySubscriber<Void> fromSubscriber(Flow.Subscriber<? super List<ByteBuffer>> subscriber)
Возвращает подписчика тела, который пересылает всё тело ответа в предоставленный Flow.Subscriber.
static <S extends Flow.Subscriber<? super List<ByteBuffer>>, T>
HttpResponse.BodySubscriber<T>
fromSubscriber(S subscriber, Function<? super S,? extends T> finisher)
Возвращает подписчика тела, который пересылает всё тело ответа в предоставленный Flow.Subscriber.
static <T, U> HttpResponse.BodySubscriber<U> mapping(HttpResponse.BodySubscriber<T> upstream, Function<? super T,? extends U> mapper)
Возвращает BodySubscriber, значение тела ответа которого является результатом применения заданной функции к объекту тела ответа данного upstream BodySubscriber.
static HttpResponse.BodySubscriber<byte[]> ofByteArray()
Возвращает BodySubscriber, который хранит тело ответа в виде массива байтов.
static HttpResponse.BodySubscriber<Void> ofByteArrayConsumer(Consumer<Optional<byte[]>> consumer)
Возвращает BodySubscriber, который предоставляет поступающие данные тела в предоставленный потребитель Optional<byte[]>.
static HttpResponse.BodySubscriber<Path> ofFile(Path file)
Возвращает BodySubscriber, который хранит тело ответа в файле, открытом с заданным именем.
static HttpResponse.BodySubscriber<Path> ofFile(Path file, OpenOption... openOptions)
Возвращает BodySubscriber, который хранит тело ответа в файле, открытом с заданными опциями и именем.
static HttpResponse.BodySubscriber<InputStream> ofInputStream()
Возвращает BodySubscriber, который передает тело ответа в виде потока InputStream.
static HttpResponse.BodySubscriber<Stream<String>> ofLines(Charset charset)
Возвращает BodySubscriber, который передает тело ответа в виде потока Stream<String>, где каждая строка в потоке соответствует строке, как определено в BufferedReader.lines().
static HttpResponse.BodySubscriber<Flow.Publisher<List<ByteBuffer>>> ofPublisher()
Возвращает подписчика ответа, который публикует тело ответа через Publisher<List<ByteBuffer>>.
static HttpResponse.BodySubscriber<String> ofString(Charset charset)
Возвращает подписчика тела, который хранит тело ответа как String, преобразованный с использованием указанной Charset.
static <U> HttpResponse.BodySubscriber<U> replacing(U value)
Возвращает подписчика ответа, который игнорирует тело ответа.

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

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

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

fromSubscriber

public static HttpResponse.BodySubscriber<Void> fromSubscriber(Flow.Subscriber<? super List<ByteBuffer>> subscriber)
Возвращает подписчика тела, который передает всё тело ответа заданному Flow.Subscriber. Этап завершения завершения возвращаемого подписчика тела завершается после вызова одного из заданных подписчиков onComplete или onError.
Примечание API:
Этот метод можно использовать в качестве адаптера между BodySubscriber и Flow.Subscriber.
Параметры:
subscriber - подписчик
Возвращает:
подписчик тела

fromSubscriber

public static <S extends Flow.Subscriber<? super List<ByteBuffer>>, T> HttpResponse.BodySubscriber<T> fromSubscriber(S subscriber, Function<? super S,? extends T> finisher)
Возвращает подписчика тела, который передает всё тело ответа заданному Flow.Subscriber. Этап завершения завершения возвращаемого подписчика тела завершается после вызова одного из заданных подписчиков onComplete или onError.

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

Примечание API:
Этот метод можно использовать в качестве адаптера между BodySubscriber и Flow.Subscriber.
Параметры типа:
S - тип подписчика
T - тип тела ответа
Параметры:
subscriber - подписчик
finisher - функция, которая применяется после завершения подписчика
Возвращает:
подписчик тела

fromLineSubscriber

public static HttpResponse.BodySubscriber<Void> fromLineSubscriber(Flow.Subscriber<? super String> subscriber)
Возвращает подписчика тела, который передает всё тело ответа заданному Flow.Subscriber построчно. Этап завершения завершения возвращаемого подписчика тела завершается после вызова одного из заданных подписчиков onComplete или onError. Байты декодируются с помощью кодировки UTF-8, а строки разделяются по правилам BufferedReader.readLine().
Примечание API:
Этот метод можно использовать в качестве адаптера между BodySubscriber и Flow.Subscriber.
Примечание реализации:
Это эквивалентно вызову
fromLineSubscriber(subscriber, s -> null, StandardCharsets.UTF_8, null)
Параметры:
subscriber - подписчик
Возвращает:
подписчик тела

fromLineSubscriber

public static <S extends Flow.Subscriber<? super String>, T> HttpResponse.BodySubscriber<T> fromLineSubscriber(S subscriber, Function<? super S,? extends T> finisher, Charset charset, String lineSeparator)
Возвращает подписчика тела, который передает всё тело ответа заданному Flow.Subscriber построчно. Этап завершения завершения возвращаемого подписчика тела завершается после вызова одного из заданных подписчиков onComplete или onError.

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

Примечание API:
Этот метод можно использовать в качестве адаптера между BodySubscriber и Flow.Subscriber.
Параметры типа:
S - тип подписчика
T - тип тела ответа
Параметры:
subscriber - подписчик
finisher - функция, которая применяется после завершения подписчика
charset - Charset для декодирования байтов
lineSeparator - необязательный разделитель строк: может быть null, в этом случае строки будут разделяться по правилам BufferedReader.readLine().
Возвращает:
подписчик тела
Исключения:
IllegalArgumentException - если переданная lineSeparator пустая строка

ofString

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

HttpResponse с этим подписчиком доступен после чтения всего ответа.

Параметры:
charset - кодировка для преобразования строки
Возвращает:
подписчик тела

ofByteArray

public static HttpResponse.BodySubscriber<byte[]> ofByteArray()
Возвращает BodySubscriber, который сохраняет тело ответа в виде массива байтов.

HttpResponse с этим подписчиком доступен после чтения всего ответа.

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

ofFile

public static HttpResponse.BodySubscriber<Path> ofFile(Path file, OpenOption... openOptions)
Возвращает BodySubscriber, который сохраняет тело ответа в файл, открытый с заданными опциями и именем. Файл будет открыт с заданными опциями с помощью FileChannel.open сразу перед чтением тела. Любое исключение будет возвращено или брошено из HttpClient::send или HttpClient::sendAsync соответственно.

HttpResponse с этим подписчиком доступен после чтения всего ответа.

В случае использования поставщика файловой системы по умолчанию, проверки разрешений менеджера безопасности выполняются в этом методе, когда BodySubscriber создаётся. В противном случае, проверки разрешений могут выполняться асинхронно по отношению к контексту вызывающего кода в момент доступа к файлу. Необходимо позаботиться о том, чтобы BodySubscriber не был предоставлен небезопасным кодом.

Параметры:
file - файл для сохранения тела
openOptions - список опций для открытия файла
Возвращает:
подписчик тела
Исключения:
IllegalArgumentException - если указан недопустимый набор опций открытия
SecurityException - в случае использования поставщика файловой системы по умолчанию и установленного менеджера безопасности, вызывается checkWrite для проверки доступа на запись в указанный файл

ofFile

public static HttpResponse.BodySubscriber<Path> ofFile(Path file)
Возвращает BodySubscriber, который сохраняет тело ответа в файл с заданным именем.

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

В случае использования поставщика файловой системы по умолчанию, проверки разрешений менеджера безопасности выполняются в этом методе, когда BodySubscriber создаётся. В противном случае, проверки разрешений могут выполняться асинхронно по отношению к контексту вызывающего кода в момент доступа к файлу. Необходимо позаботиться о том, чтобы BodySubscriber не был предоставлен небезопасным кодом.

Параметры:
file - файл для сохранения тела
Возвращает:
подписчик тела
Исключения:
SecurityException - в случае использования поставщика файловой системы по умолчанию и установленного менеджера безопасности, вызывается checkWrite для проверки доступа на запись в указанный файл

ofByteArrayConsumer

public static HttpResponse.BodySubscriber<Void> ofByteArrayConsumer(Consumer<Optional<byte[]>> consumer)
Возвращает BodySubscriber, который предоставляет данные входящего тела заданному потребителю Optional<byte[]>. Каждый вызов Consumer.accept() будет содержать непустой Optional, за исключением последнего вызова после чтения всех данных тела, когда Optional будет пустым.

HttpResponse с этим подписчиком доступен после чтения всего ответа.

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

ofInputStream

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

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

API Note:
Для надлежащего освобождения всех ресурсов, связанных с соответствующим обменом, вызывающая сторона должна либо прочитать все байты до достижения конца потока, либо вызвать InputStream.close(), если это невозможно или нежелательно. Вызов close перед исчерпанием потока может привести к закрытию базового HTTP-соединения и предотвратить его повторное использование для последующих операций.
Implementation Note:
Метод read объекта InputStream, возвращаемого по умолчанию этим методом, бросит IOException с установленным статусом прерывания потока, если поток прерван во время блокировки на чтение. В этом случае запрос также будет отменён, и InputStream будет закрыт.
Returns:
подписчик тела, который потоково считывает тело ответа в виде InputStream.

ofLines

public static HttpResponse.BodySubscriber<Stream<String>> ofLines(Charset charset)
Возвращает BodySubscriber, который потоково считывает тело ответа в виде Stream<String>, где каждая строка в потоке соответствует строке, определённой в BufferedReader.lines().

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

API Note:
Для надлежащего освобождения всех ресурсов, связанных с соответствующим обменом, вызывающая сторона должна либо прочитать все строки до исчерпания потока, либо вызвать BaseStream.close(), если это невозможно или нежелательно. Вызов close перед исчерпанием потока может привести к закрытию базового HTTP-соединения и предотвратить его повторное использование для последующих операций.
Parameters:
charset - кодировка символов, используемая при преобразовании байтов в символы
Returns:
подписчик тела, который потоково считывает тело ответа в виде Stream<String>.
See Also:
  • BufferedReader.lines()

ofPublisher

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

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

Издатель, возвращаемый методом body, может быть подписан только один раз. Первый подписчик получит байты ответа при успешном подписывании, или подписка будет отменена в противном случае. Если будут попытки подписки, последующие подписчики будут немедленно подписаны с пустой подпиской, и их метод onError будет вызван с IllegalStateException.

API Note:
Для надлежащего освобождения всех ресурсов, связанных с соответствующим обменом, вызывающая сторона должна гарантировать, что предоставленный издатель подписан один раз, и либо запрашивает все байты до вызова onComplete или onError, либо отменить предоставленную подписку, если это невозможно или нежелательно. Обратите внимание, что в зависимости от фактического HTTP-протокола версии, используемой для обмена, отмена подписки вместо исчерпания потока может привести к закрытию базового HTTP-соединения и предотвратить его повторное использование для последующих операций.
Returns:
BodySubscriber , который публикует тело ответа через Publisher<List<ByteBuffer>>.

replacing

public static <U> HttpResponse.BodySubscriber<U> replacing(U value)
Возвращает подписчика ответа, который игнорирует тело ответа. Указанное значение — это значение, которое будет возвращено из HttpResponse.body().
Type Parameters:
U - тип тела ответа
Parameters:
value - значение, возвращаемое из HttpResponse.body(), может быть null
Returns:
BodySubscriber

discarding

public static HttpResponse.BodySubscriber<Void> discarding()
Возвращает подписчика ответа, который игнорирует тело ответа.
Returns:
подписчик тела ответа

buffering

public static <T> HttpResponse.BodySubscriber<T> buffering(HttpResponse.BodySubscriber<T> downstream, int bufferSize)
Возвращает BodySubscriber, который буферизует данные перед передачей их заданному подписчику вниз по потоку. Подписчик гарантирует доставку bufferSize байт данных при каждом вызове метода onNext подписчика вниз по потоку, за исключением последнего вызова, непосредственно перед вызовом onComplete. Последний вызов onNext может содержать меньше, чем bufferSize байт.

Возвращаемый подписчик делегирует свой метод getBody() подписчику вниз по потоку.

Type Parameters:
T - тип тела ответа
Parameters:
downstream - подписчик вниз по потоку
bufferSize - размер буфера
Returns:
подписчик буферизации тела
Throws:
IllegalArgumentException - если bufferSize <= 0

mapping

public static <T, U> HttpResponse.BodySubscriber<U> mapping(HttpResponse.BodySubscriber<T> upstream, Function<? super T,? extends U> mapper)
Возвращает BodySubscriber, значение тела ответа которого является результатом применения заданной функции к объекту тела ответа заданного upstream BodySubscriber.

Функция отображения выполняется с помощью исполнителя клиента executor и поэтому может быть использована для отображения любого типа тела ответа, включая блокирующие InputStream. Однако выполнение любой блокирующей операции в функции отображения несёт риск блокировки потока исполнителя на неизвестное время (по крайней мере, до завершения блокирующей операции), что может привести к недостатку доступных потоков для исполнителя. Поэтому, в случае, когда отображение в требуемый тип может заблокировать (например, при чтении из InputStream), предпочтительнее отобразить на Supplier нужного типа и отложить блокирующую операцию до вызова Supplier::get потоком вызывающей стороны, как показано в следующем примере, который использует известный парсер JSON для преобразования InputStream в любой аннотированный Java-тип.

Например:

 public static <W> BodySubscriber<Supplier<W>> asJSON(Class<W> targetType) {
   BodySubscriber<InputStream> upstream = BodySubscribers.ofInputStream();

   BodySubscriber<Supplier<W>> downstream = BodySubscribers.mapping(
         upstream,
         (InputStream is) -> () -> {
             try (InputStream stream = is) {
                 ObjectMapper objectMapper = new ObjectMapper();
                 return objectMapper.readValue(stream, targetType);
             } catch (IOException e) {
                 throw new UncheckedIOException(e);
             }
         });
  return downstream;
}
Type Parameters:
T - тип тела потока вверх по потоку
U - тип возвращаемого подписчика тела
Parameters:
upstream - подписчик тела для отображения
mapper - функция отображения
Returns:
подписчик отображения тела

© 1993, 2023, 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/21/docs/api/java.net.http/java/net/http/HttpResponse.BodySubscribers.html

Spec-Zone.ru

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