Класс 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());
- С:
- 11
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
static <T> HttpResponse.BodyHandler<T> | buffering(HttpResponse.BodyHandler<T> downstreamHandler,
int bufferSize) | Возвращает |
static HttpResponse.BodyHandler<Void> | discarding() | Возвращает обработчик тела ответа, который игнорирует тело ответа. |
static HttpResponse.BodyHandler<Void> | fromLineSubscriber(Flow.Subscriber<? super String> subscriber) | Возвращает обработчик тела ответа, который возвращает |
static <S extends Flow.Subscriber<? super String>,T> | fromLineSubscriber(S subscriber,
Function<? super S,? extends T> finisher,
String lineSeparator) | Возвращает обработчик тела ответа, который возвращает |
static HttpResponse.BodyHandler<Void> | fromSubscriber(Flow.Subscriber<? super List<ByteBuffer>> subscriber) | Возвращает обработчик тела ответа, который возвращает |
static <S extends Flow.Subscriber<? super List<ByteBuffer>>,T> | fromSubscriber(S subscriber,
Function<? super S,? extends T> finisher) | Возвращает обработчик тела ответа, который возвращает |
static HttpResponse.BodyHandler<byte[]> | ofByteArray() | Возвращает |
static HttpResponse.BodyHandler<Void> | ofByteArrayConsumer(Consumer<Optional<byte[]>> consumer) | Возвращает |
static HttpResponse.BodyHandler<Path> | ofFile(Path file) | Возвращает |
static HttpResponse.BodyHandler<Path> | ofFile(Path file,
OpenOption... openOptions) | Возвращает |
static HttpResponse.BodyHandler<Path> | ofFileDownload(Path directory,
OpenOption... openOptions) | Возвращает |
static HttpResponse.BodyHandler<InputStream> | ofInputStream() | Возвращает |
static HttpResponse.BodyHandler<Stream<String>> | ofLines() | Возвращает |
static HttpResponse.BodyHandler<Flow.Publisher<List<ByteBuffer>>> | ofPublisher() | Возвращает |
static HttpResponse.BodyHandler<String> | ofString() | Возвращает |
static HttpResponse.BodyHandler<String> | ofString(Charset 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.
Тело ответа недоступно через этот или
HttpResponse API, но вместо этого всё тело ответа пересылается заданному 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().
Тело ответа недоступно через этот или
HttpResponse API, но вместо этого всё тело ответа пересылается заданному 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.
Проверки разрешений менеджера безопасности выполняются в этом фабричном методе при создании BodyHandler. Следует позаботиться о том, чтобы BodyHandler не был доступен небезопасным кодам.
- Параметры:
-
file- файл для хранения тела -
openOptions- параметры открытия/создания файла - Возвращает:
- обработчик тела ответа
- Исключения:
-
IllegalArgumentException- если указан недопустимый набор параметров открытия -
SecurityException- если установлен менеджер безопасности и он запрещает доступ к файлуwrite access.
ofFile
public static HttpResponse.BodyHandler<Path> ofFile(Path file)
Возвращает BodyHandler<Path>, который возвращает BodySubscriber<Path>.
Эквивалентно: ofFile(file, CREATE, WRITE)
Проверки разрешений менеджера безопасности выполняются в этом фабричном методе при создании BodyHandler. Следует позаботиться о том, чтобы BodyHandler не был доступен небезопасным кодам.
- Параметры:
-
file- файл для хранения тела - Возвращает:
- обработчик тела ответа
- Исключения:
-
SecurityException- если установлен менеджер безопасности и он запрещает доступ к файлуwrite access.
ofFileDownload
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.
Проверки разрешений менеджера безопасности выполняются в этом фабричном методе при создании BodyHandler. Следует позаботиться о том, чтобы BodyHandler не был доступен небезопасным кодам.
- Параметры:
-
directory- каталог для хранения файла -
openOptions- параметры открытия файла - Возвращает:
- обработчик тела ответа
- Исключения:
-
IllegalArgumentException- если указанный путь не существует, не является каталогом, не доступен для записи или заданы недопустимые параметры открытия -
SecurityException- если установлена система безопасности и она запрещает доступ для чтения к каталогу или запись в каталог, или запись в файлы внутри каталога.
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 возвращается, тело может еще не быть полностью получено.
- Возвращает:
- обработчик тела ответа
ofByteArrayConsumer
public static HttpResponse.BodyHandler<Void> ofByteArrayConsumer(Consumer<Optional<byte[]>> consumer)
Возвращает BodyHandler<Void>, который возвращает BodySubscriber<Void> полученный из BodySubscribers.ofByteArrayConsumer(Consumer).
Когда объект HttpResponse возвращается, тело полностью передано потребителю.
- Примечание API:
- Подписчик, возвращаемый этим обработчиком, не контролирует поток. Поэтому предоставленный потребитель должен быть способен обработать любое количество данных в разумные сроки.
- Параметры:
-
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, из которого можно получить байты тела ответа по мере их получения. Издатель может и должен быть подписан только один раз.>
- Примечание API:
- Дополнительную информацию см. в
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
© 1993, 2020, 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/11/docs/api/java.net.http/java/net/http/HttpResponse.BodyHandlers.html