Spec-Zone.ru › OpenJDK 17

Класс 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, который предоставляет данные входящего тела заданному Consumer of 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. Этап завершения (completion stage) возвращаемого подписчика на тело завершается после вызова одного из заданных подписчиков 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. Этап завершения (completion stage) возвращаемого подписчика на тело завершается после вызова одного из заданных подписчиков 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 по строкам. Этап завершения (completion stage) возвращаемого подписчика на тело завершается после вызова одного из заданных подписчиков 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 по строкам. Этап завершения (completion stage) возвращаемого подписчика на тело завершается после вызова одного из заданных подписчиков 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)
Возвращает подписчика на тело ответа, который хранит тело ответа как строку, преобразованную с использованием заданной кодировки 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-соединения и предотвратить его повторное использование для последующих операций.
Возвращает:
подписчик тела, который получает тело ответа как InputStream.

ofLines

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

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

API Note:
Для обеспечения правильного освобождения всех ресурсов, связанных с соответствующим обменом, вызывающая сторона должна либо прочитать все строки до исчерпания потока, либо вызвать BaseStream.close(), если это невозможно или нежелательно. Вызов close до исчерпания потока может привести к закрытию базового HTTP-соединения и предотвратить его повторное использование для последующих операций.
Параметры:
charset - кодировка символов, используемая при преобразовании байтов в символы
Возвращает:
подписчик тела, который получает тело ответа как Stream<String>.
См. также:
  • 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-соединения и предотвратить его повторное использование для последующих операций.
Возвращает:
BodySubscriber который публикует тело ответа через Publisher<List<ByteBuffer>>.

replacing

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

discarding

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

buffering

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

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

Параметры типа:
T - тип тела ответа
Параметры:
downstream - подписчик вниз по потоку
bufferSize - размер буфера
Возвращает:
буферизованный подписчик тела
Исключения:
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.

Функция преобразования выполняется с помощью потока потока клиента и, следовательно, может использоваться для преобразования любого типа тела ответа, включая блокирующий 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;
  } 
Параметры типа:
T - тип тела входного потока
U - тип возвращаемого подписчика тела
Параметры:
upstream - подписчик тела, который требуется преобразовать
mapper - функция преобразования
Возвращает:
подписчик тела преобразования

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

Spec-Zone.ru

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