モジュール jdk.incubator.httpclient
パッケージ jdk.incubator.http

インタフェースHttpResponse.BodyHandler<T>

  • 型パラメータ:
    T - レスポンス本文型。
    含まれているクラス:
    HttpResponse < T>
    関数型インタフェース:
    これは関数型インタフェースなので、ラムダ式またはメソッド参照の代入先として使用できます。


    @FunctionalInterface
    public static interface HttpResponse.BodyHandler<T>
    レスポンス本文のハンドラ。
    インキュベーション機能。将来のリリースで削除されます。

    これは、2つのパラメータ: レスポンス・ステータス・コード、およびレスポンス・ヘッダーを返し、HttpResponse.BodyProcessorを返します。 この関数は、レスポンス本文が読み込まれる直前に常に呼び出されます。 その実装は、ステータス・コードまたはヘッダーを調べ、レスポンス本文を受け入れるか廃棄するか、それを受け入れるかどうかを決める必要があります。

    ステータス・コードまたはヘッダー(体は常に受け入れられている)を使用しない事前定義された実装がいくつか定義されています:

    これらの実装は同等のHttpResponse.BodyProcessorを返します。 あるいは、ハンドラを使用してステータス・コードを調べたり、必要に応じて異なる本文プロセッサを返すことができます。

    ハンドラの使用例

    最初の例では、レスポンス・ヘッダーとステータスを無視し、常に同じ方法でレスポンス本文を処理する事前定義されたハンドラ関数の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
                          ? BodyProcessor.asFile(Paths.get("/tmp/f"))
                          : BodyProcessor.discard(Paths.get("/NULL")));
     
     
    • メソッドの詳細

      • apply

        HttpResponse.BodyProcessor<T> apply​(int statusCode,
                                            HttpHeaders responseHeaders)
        指定されたレスポンス・ステータス・コードとヘッダーを考慮してBodyProcessorを返します。 このメソッドは、本文が読み込まれる前に常に呼び出され、その実装は、discard()から返されたBodyProcessorを返すことで、本文を保持してどこかに格納するか、または破棄するかを決定できます。
        パラメータ:
        statusCode - 受信したHTTPステータス・コード
        responseHeaders - 受信したレスポンス・ヘッダー
        戻り値:
        レスポンス本文ハンドラ
      • discard

        static <U> HttpResponse.BodyHandler<U> discard​(U value)
        レスポンス本文を破棄し、指定された値をその代わりに使用するレスポンス本文ハンドラを返します。
        型パラメータ:
        U - レスポンス本文型
        パラメータ:
        value - 身体として返すUの値
        戻り値:
        レスポンス本文ハンドラ
      • asString

        static HttpResponse.BodyHandler<String> asString​(Charset charset)
        BodyProcessor.asString(Charset)から取得したBodyProcessor <String>を返すBodyHandler<String>を返します。 文字セットが提供されている場合、本文はそれを使用してデコードされます。 charsetがnullの場合、プロセッサはContent-encodingヘッダーから文字セットを判別しようとします。 その文字セットがサポートされていない場合、UTF_8が使用されます。
        パラメータ:
        charset - 本文を解釈する文字セットの名前。 nullの場合、Content-encodingヘッダーからcharsetを決定した場合
        戻り値:
        レスポンス本文ハンドラ
      • asFileDownload

        static HttpResponse.BodyHandler<Path> asFileDownload​(Path directory,
                                                             OpenOption... openOptions)
        ダウンロード・ディレクトリが指定されているBodyProcessor<Path>を返すBodyHandler<Path>を返しますが、ファイル名はContent-Dispositionレスポンス・ヘッダーから取得されます。 Content-Dispositionヘッダーにはattachment型を指定する必要があり、filenameパラメータも含める必要があります。 ファイル名に複数のパス・コンポーネントが指定されている場合、最終コンポーネントのみがファイル名(与えられたディレクトリ名で)として使用されます。 HttpResponseオブジェクトが返されると、本文はファイルに完全に書き込まれ、HttpResponse.body()はファイルのPathオブジェクトを返します。 返されるPathは、提供されたディレクトリ名とサーバーによって提供されるファイル名の組み合わせです。 先のディレクトリが存在しないかに書き込むことができない場合、レスポンスはIOExceptionで失敗します。
        パラメータ:
        directory - ファイルを格納するディレクトリ
        openOptions - オープン・オプション
        戻り値:
        レスポンス本文ハンドラ
      • asByteArray

        static HttpResponse.BodyHandler<byte[]> asByteArray​()
        BodyProcessor.asByteArray()から取得したBodyProcessor<byte[]>を返すBodyHandler<byte[]>を返します。

        HttpResponseオブジェクトが返されると、本文はバイト配列に完全に書き込まれます。

        戻り値:
        レスポンス本文ハンドラ
      • asString

        static HttpResponse.BodyHandler<String> asString​()
        BodyProcessor.asString(Charset)から取得したBodyProcessor <String>を返すBodyHandler<String>を返します。 本文はContent-encodingレスポンス・ヘッダーで指定された文字セットを使用して復号化されます。 そのようなヘッダーがない場合、または文字セットがサポートされていない場合は、UTF_8が使用されます。

        HttpResponseオブジェクトが返されると、本文は文字列に完全に書き込まれます。

        戻り値:
        レスポンス本文ハンドラ