先月、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 を返す。