HTTP/2 Clientは、Java SE 9におけるIncubator Moduleとして実験的に導入されました。前回は、HTTP/2 Clientの基本的な使用法として、HTTPのGETメソッドを使用してリソースを取得するまでを解説しました。今月は、前回の続きとしてPOSTメソッドを使用してみましょう。

POSTメソッド

 POSTを使用する手順は、前回使用したGETとほぼ同じです。おおまかな手順は以下のようになります。

  1. HttpClientオブジェクトの生成
  2. HttpRequestオブジェクトを生成し、HTTPリクエストを作成
  3. HttpClientオブジェクトから、HTTPリクエストを送信
  4. HttpResponseオブジェクトを使用して、HTTPレスポンスを処理

 GETとの違いは、(2)のHTTPリクエストの作成部分です。

 POSTとGETの使用上の違いの1つにボディの送信があります。POSTではボディを送信できますが、まずはボディを送信せずに試してみましょう(リスト1)。

リスト1●POSTの使用例

// 1. HttpClientオブジェクトの生成
HttpClient client = HttpClient.newBuilder()
                              .followRedirects(HttpClient.Redirect.ALWAYS)
                              .build();

// 2. HTTPリクエストの作成
HttpRequest request = HttpRequest.newBuilder(URI.create("http://localhost:8084/demo"))
                                 .POST(HttpRequest.noBody())
                                 .build();

// 3. HTTPリクエストの送信
HttpResponse<String> response = client.send(
        request,
        HttpResponse.BodyHandler.asString()
);

// 4. HTTPレスポンスの処理は省略

 HttpClientオブジェクトの生成はGETの場合と同じです。ここでは、前回紹介したようにリダイレクトを行うように指定してあります。また、HTTPリクエストの送信およびHTTPレスポンスの処理もGETの場合と同じです。

 唯一異なるのが、HTTPリクエストの作成部分です。HttpRequestクラスのnewBuilderメソッドでHttpRequest.Builderオブジェクトを生成します。引数はURIです。ここでは、テスト用にローカルの8084ポートでWebサーバーを起動しています。

 POSTを使用する場合、赤字で示したようにPOSTメソッドを使用します。GETメソッドは引数がありませんでしたが、POSTメソッドはHttpRequest.BodyProcessorインタフェースの引数をとります。POSTでボディを送信する場合、この引数で指定します。しかし、ここではボディを送信しないため、HttpRequestクラスのnoBodyメソッドを使用します(青字部分)。

最後に、buildメソッドでHttpRequestオブジェクトを生成するのも、GETの場合と同じです。なお、sendメソッドでのjava.io.IOException例外の例外処理は省略してあります。

この先は会員の登録が必要です。今なら有料会員(月額プラン)登録で6月末まで無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら