モジュール java.net.http
パッケージ java.net.http

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

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

@FunctionalInterface
public static interface HttpResponse.BodyHandler<T>
レスポンス本文のハンドラ。 クラスBodyHandlersは、多くの共通本文ハンドラの実装を提供します。

BodyHandlerインタフェースでは、実際のレスポンス本文を受信する前にレスポンス・コードとヘッダーを検査でき、BodySubscriberレスポンスの作成を担当します。 BodySubscriberは実際のレスポンス本文バイトを消費し、通常は上位レベルのJavaタイプに変換します。

BodyHandlerは、ResponseInfoオブジェクトを取得し、BodySubscriberを返す関数です。 BodyHandlerは、レスポンスのステータス・コードおよびヘッダーが使用可能になったときに呼び出されますが、レスポンス本文のバイトが受信される前に呼び出されます。

次の例では、(レスポンス本文をファイルにストリームします。)と同じ方法で常にレスポンス本文を処理する「事前定義済本文ハンドラ」のいずれかを使用します。

  HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("http://www.foo.com/"))
        .build();
  client.sendAsync(request, BodyHandlers.ofFile(Paths.get("/tmp/f")))
        .thenApply(HttpResponse::body)
        .thenAccept(System.out::println); 
事前定義済ハンドラではレスポンス・コードを検査できませんが、返されると、応答コードおよびヘッダーは常にHttpResponseから取得できます。

2番目の例では、この関数はステータス・コードに応じて異なるサブスクライバを返します。

  HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("http://www.foo.com/"))
        .build();
  BodyHandler<Path> bodyHandler = (rspInfo) -> rspInfo.statusCode() == 200
                      ? BodySubscribers.ofFile(Paths.get("/tmp/f"))
                      : BodySubscribers.replacing(Paths.get("/NULL"));
  client.sendAsync(request, bodyHandler)
        .thenApply(HttpResponse::body)
        .thenAccept(System.out::println); 

導入されたバージョン:
11
関連項目:
HttpResponse.BodyHandlers
  • メソッドの詳細

    • apply

      与えられたレスポンス・ステータス・コードとヘッダーを考慮してBodySubscriberを返します。 実際のレスポンス本文バイトが読み取られる前にこのメソッドが呼び出され、レスポンス本文バイトを使用するには、実装でBodySubscriberが返される必要があります。

      レスポンス本文は、discardingまたはreplacingのいずれかを使用して破棄できます。

      パラメータ:
      responseInfo - レスポンス情報
      戻り値:
      本文サブスクライバ