Java11 からの HttpClient

先月、OpenJDK 11 もリリースされて、Java9 でインキュベータとして出てた HttpClient が、
java.net.http パッケージに入った。
去年、Java9 の HttpClient を試す - Oboe吹きプログラマの黙示録
を書いたのだが、
リクエストの送信も、Java11 から、、HttpResponse.BodyHandlers というのを
使えるようになっていて、
例として、、

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.google.co.jp/"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

と、Java11 からもっと簡単に書けるようになっている。
HttpResponse<T> を取得する HTTP送信メソッドは、JavaDoc では、

// 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());  }

この2番目と3番目、HttpResponse<Path> と HttpResponse<InputStream>
これは、強力だと思う。

HttpResponse<Path> を受け取る方法は、HTTP応答をファイルとして書き込む方法であり
書き込んだファイルの Path を受け取る。
HttpResponse<InputStream> を受け取る方法は、HTTP応答を InputStream で受け取る。
HTTP応答を InputStream で受け取る場合は、body() メソッドが InputStream を返す。