-
- 型パラメータ:
T
- レスポンス本文型
- 含まれているクラス:
- HttpResponse < T>
- 関数型インタフェース:
- これは関数型インタフェースなので、ラムダ式またはメソッド参照の代入先として使用できます。
@FunctionalInterface public static interface HttpResponse.BodyHandler<T>
レスポンス本文のハンドラ。
インキュベーション機能。将来のリリースで削除されます。これは、2つのパラメータ: レスポンス・ステータス・コード、およびレスポンス・ヘッダーを返し、HttpResponse.BodySubscriberを返します。 この関数は、レスポンス本文が読み込まれる直前に常に呼び出されます。 その実装は、ステータス・コードまたはヘッダーを調べ、レスポンス本文を受け入れるか廃棄するか、それを受け入れるかどうかを決める必要があります。
ステータス・コードまたはヘッダー(体は常に受け入れられている)を使用しない事前定義された実装がいくつか定義されています:
asByteArray()
asByteArrayConsumer(Consumer)
asString(Charset)
asFile(Path,OpenOption...)
asFileDownload(Path,OpenOption...)
asInputStream()
discard(Object)
buffering(BodyHandler,int)
これらの実装は同等の
HttpResponse.BodySubscriber
を返します。 あるいは、ハンドラを使用して、ステータス・コードまたはヘッダーを検査し、適切な場合に異なる本文サブスクライバを返すことができます。ハンドラの使用例
最初の例では、レスポンス・ヘッダーとステータスを無視し、常に同じ方法でレスポンス本文を処理する事前定義されたハンドラ関数の1つを使用しています。
HttpResponse<Path> resp = HttpRequest .create(URI.create("http://www.foo.com")) .GET() .response(BodyHandler.asFile(Paths.get("/tmp/f")));
HttpResponse
から返されるときには、この情報に引き続きアクセスできます。2番目の例では、この関数はステータス・コードに応じて異なるサブスクライバを返します。
HttpResponse<Path> resp1 = HttpRequest .create(URI.create("http://www.foo.com")) .GET() .response( (status, headers) -> status == 200 ? BodySubscriber.asFile(Paths.get("/tmp/f")) : BodySubscriber.discard(Paths.get("/NULL")));
-
-
メソッドのサマリー
-
-
-
メソッドの詳細
-
apply
HttpResponse.BodySubscriber<T> apply(int statusCode, HttpHeaders responseHeaders)
与えられたレスポンス・ステータス・コードとヘッダーを考慮してBodySubscriber
を返します。 このメソッドは、本文が読み込まれる前に常に呼び出され、その実装は本文を保持してどこかに格納するか、discard
から返されたBodySubscriber
を返すことで破棄します。- パラメータ:
statusCode
- 受信したHTTPステータス・コードresponseHeaders
- 受信したレスポンス・ヘッダー- 戻り値:
- 本文サブスクライバ
-
fromSubscriber
static HttpResponse.BodyHandler<Void> fromSubscriber(Flow.Subscriber<? super List<ByteBuffer>> subscriber)
HttpResponse.BodySubscriber.fromSubscriber(Subscriber)から取得したBodySubscriber
<Void>
を、指定されたsubscriber
を返して返すレスポンス本文ハンドラを返します。レスポンス本文はこれ、または
HttpResponse
APIでは利用できませんが、代わりにすべてのレスポンス本文が特定のsubscriber
に転送されます。- APIの注:
- このメソッドは、
BodySubscriber
とFlow.Subscriber
の間のアダプタとして使用できます。次に例を示します。
TextSubscriber subscriber = new TextSubscriber(); HttpResponse<Void> response = client.sendAsync(request, BodyHandler.fromSubscriber(subscriber)).join(); System.out.println(response.statusCode());
- パラメータ:
subscriber
- サブスクライバ- 戻り値:
- レスポンス本文ハンドラ
-
fromSubscriber
static <S extends Flow.Subscriber<? super List<ByteBuffer>>,T> HttpResponse.BodyHandler<T> fromSubscriber(S subscriber, Function<S,T> finisher)
指定されたsubscriber
およびfinisher
関数を使用して、HttpResponse.BodySubscriber.fromSubscriber(Subscriber, Function)
から取得したBodySubscriber
<T>
を返すレスポンス本文ハンドラを返します。指定された
finisher
関数は、指定されたサブスクライバonComplete
が呼び出された後に適用されます。finisher
関数は、指定されたサブスクライバとともに起動され、レスポンス本文として設定された値を返します。- APIの注:
- このメソッドは、
BodySubscriber
とFlow.Subscriber
の間のアダプタとして使用できます。次に例を示します。
TextSubscriber subscriber = ...; // accumulates bytes and transforms them into a String HttpResponse<String> response = client.sendAsync(request, BodyHandler.fromSubscriber(subscriber, TextSubscriber::getTextResult)).join(); String text = response.body();
- 型パラメータ:
S
- サブスクライバのタイプT
- レスポンス本文のタイプ- パラメータ:
subscriber
- サブスクライバfinisher
- サブスクライバが完了した後に適用される機能- 戻り値:
- レスポンス本文ハンドラ
-
discard
static <U> HttpResponse.BodyHandler<U> discard(U value)
レスポンス本文を破棄し、指定された値をその代わりに使用するレスポンス本文ハンドラを返します。- 型パラメータ:
U
- レスポンス本文型- パラメータ:
value
- 本文として返すUの値は、null
- 戻り値:
- レスポンス本文ハンドラ
-
asString
static HttpResponse.BodyHandler<String> asString(Charset charset)
BodySubscriber.asString(Charset)
から取得したBodySubscriber
<String>
を返すBodyHandler<String>
を返します。 本文は、指定された文字セットを使用してデコードされます。- パラメータ:
charset
- 本文を変換する文字セット- 戻り値:
- レスポンス本文ハンドラ
-
asFile
static HttpResponse.BodyHandler<Path> asFile(Path file, OpenOption... openOptions)
BodySubscriber.asFile(Path,OpenOption...)
から取得したBodySubscriber
<Path>
を返すBodyHandler<Path>
を返します。HttpResponse
オブジェクトが返されると、本文はファイルに完全に書き込まれ、HttpResponse.body()
はそのPath
への参照を返します。- パラメータ:
file
- 本文を格納するファイル名openOptions
- ファイルのオープン/作成時に使用するオプション- 戻り値:
- レスポンス本文ハンドラ
- 例外:
SecurityException
- セキュリティ・マネージャがインストールされていて、ファイルにwrite access
が拒否されている場合。DELETE_ON_CLOSE
オプションでファイルが開かれた場合は、checkDelete
メソッドが呼び出されて削除アクセスがチェックされます。
-
asFile
static HttpResponse.BodyHandler<Path> asFile(Path file)
BodySubscriber.asFile(Path)
から取得したBodySubscriber
<Path>
を返すBodyHandler<Path>
を返します。HttpResponse
オブジェクトが返されると、本文はファイルに完全に書き込まれ、HttpResponse.body()
はそのPath
への参照を返します。- パラメータ:
file
- 本文を格納するファイル- 戻り値:
- レスポンス本文ハンドラ
- 例外:
SecurityException
- セキュリティ・マネージャがインストールされていて、ファイルへのwrite access
を拒否した場合
-
asFileDownload
static HttpResponse.BodyHandler<Path> asFileDownload(Path directory, OpenOption... openOptions)
ダウンロード・ディレクトリが指定されているBodySubscriber
<Path
>を返すBodyHandler<Path>
を返しますが、ファイル名はContent-Disposition
レスポンス・ヘッダーから取得されます。Content-Disposition
ヘッダーにはattachment型を指定する必要があり、filenameパラメータも含める必要があります。 ファイル名に複数のパス・コンポーネントが指定されている場合、最終コンポーネントのみがファイル名(与えられたディレクトリ名で)として使用されます。HttpResponse
オブジェクトが返されると、本文はファイルに完全に書き込まれ、HttpResponse.body()
はファイルのPath
オブジェクトを返します。 返されるPath
は、提供されたディレクトリ名とサーバーによって提供されるファイル名の組み合わせです。 宛先ディレクトリが存在しないか、または書き込めない場合は、IOException
を実行するとレスポンスは失敗します。- パラメータ:
directory
- ファイルを格納するディレクトリopenOptions
- オープン・オプション- 戻り値:
- レスポンス本文ハンドラ
- 例外:
SecurityException
- セキュリティ・マネージャがインストールされていて、ファイルにwrite access
が拒否されている場合。DELETE_ON_CLOSE
オプションでファイルが開かれた場合は、checkDelete
メソッドが呼び出されて削除アクセスがチェックされます。
-
asInputStream
static HttpResponse.BodyHandler<InputStream> asInputStream()
BodySubscriber.asInputStream
から取得したBodySubscriber
<InputStream>
を返すBodyHandler<InputStream>
を返します。HttpResponse
オブジェクトが返されると、レスポンス・ヘッダーは完全に読み取られますが、本文がまだ完全に受信されていない可能性があります。HttpResponse.body()
メソッドはInputStream
を返します。InputStream
から本文を受信したときに読み取ることができます。- APIの注:
- 詳細については、
HttpResponse.BodySubscriber.asInputStream()
を参照してください。 - 戻り値:
- レスポンス本文ハンドラ
-
asByteArrayConsumer
static HttpResponse.BodyHandler<Void> asByteArrayConsumer(Consumer<Optional<byte[]>> consumer)
BodySubscriber.asByteArrayConsumer(Consumer)
から取得したBodySubscriber
<Void>
を返すBodyHandler<Void>
を返します。HttpResponse
オブジェクトが返されると、本文はコンシューマに完全に書き込まれました。- パラメータ:
consumer
- レスポンス本文を受け入れるコンシューマ- 戻り値:
- レスポンス本文ハンドラ
-
asByteArray
static HttpResponse.BodyHandler<byte[]> asByteArray()
BodySubscriber.asByteArray()
から取得したBodySubscriber
<byte[]
>を返すBodyHandler<byte[]>
を返します。HttpResponse
オブジェクトが返されると、本文はバイト配列に完全に書き込まれます。- 戻り値:
- レスポンス本文ハンドラ
-
asString
static HttpResponse.BodyHandler<String> asString()
BodySubscriber.asString(Charset)
から取得したBodySubscriber
<String>
を返すBodyHandler<String>
を返します。 本文はContent-encoding
レスポンス・ヘッダーで指定された文字セットを使用して復号化されます。 そのようなヘッダーがない場合、または文字セットがサポートされていない場合は、UTF_8
が使用されます。HttpResponse
オブジェクトが返されると、本文は文字列に完全に書き込まれます。- 戻り値:
- レスポンス本文ハンドラ
-
buffering
static <T> HttpResponse.BodyHandler<T> buffering(HttpResponse.BodyHandler<T> downstreamHandler, int bufferSize)
BodyHandler
を返します。BodyHandler
は、呼び出されるとデータをバッファリングして下流のサブスクライバに配信する「BodySubscriberをバッファリング」を返します。 これらのBodySubscriber
インスタンスは、指定されたダウンストリーム・ハンドラから取得したサブスクライバとbufferSize
パラメータを使用してBodySubscriber.bufferingを呼び出すことによって作成されます。- パラメータ:
downstreamHandler
- 下流のハンドラbufferSize
- BodySubscriber.bufferingに渡されるバッファ・サイズ・パラメータ- 戻り値:
- 本文ハンドラ
- 例外:
IllegalArgumentException
-bufferSize <= 0
の場合
-
-