レスポンスの処理
BodyHandlers とステータスコードです。
「レスポンスの処理」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
レスポンスの処理
HTTPクライアントのすべての呼び出しは、HttpResponse<T> を返します。ジェネリック型 T は、渡す BodyHandler によって決まります。このレッスンでは、利用可能なハンドラーとステータスコードの解釈方法について説明します。
HttpResponse API
HttpResponse の主なメソッドは次のとおりです。
statusCode()— int型のステータスコードです。body()—T型にデコードされたボディです。headers()— レスポンスヘッダーです。uri()— 最終的なURIです(リダイレクト後のURI)。version()— HTTP/1.1またはHTTP/2です。
BodyHandlers.ofString
最も一般的なハンドラーは、レスポンスのcharsetを使ってボディを String にデコードします。charsetが指定されていない場合はUTF-8を使用します。レスポンスの型は HttpResponse<String> です。
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://example.com")).build();
HttpResponse<String> res =
client.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body().length());
}
}BodyHandlers.ofByteArray
画像などのバイナリコンテンツには、ofByteArray() を使います。ボディの型は byte[] になり、ディスクに書き込んだり、自分でデコードしたりできます。
public class Main {
public static void main(String[] args) {
// ofByteArray() yields HttpResponse<byte[]>
byte[] simulated = { 1, 2, 3, 4 };
System.out.println("Bytes received: " + simulated.length);
}
}BodyHandlers.ofFile
ofFile(path) はレスポンスを直接ディスクにストリーム送信し、HttpResponse<Path> を返します。これにより、大きなダウンロードをメモリ上にバッファリングせずに済みます。
import java.net.URI;
import java.net.http.*;
import java.nio.file.Path;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://example.com/file.zip")).build();
HttpResponse<Path> res = client.send(req,
HttpResponse.BodyHandlers.ofFile(Path.of("out.zip")));
System.out.println("Saved to: " + res.body());
}
}BodyHandlers.discarding
ステータスとヘッダーだけが必要な場合、discarding() はボディを破棄し、HttpResponse<Void> を生成します。バッファリングのコストを避けられます。
成功の確認
一般的なヘルパーでは、ボディを信頼する前にステータスが2xxの範囲にあるかを確認します。
public class Main {
static boolean isSuccess(int code) {
return code >= 200 && code < 300;
}
public static void main(String[] args) {
System.out.println(isSuccess(204));
System.out.println(isSuccess(404));
}
}ステータスカテゴリへの対応
先頭の数字に応じて分岐し、成功、リダイレクト、エラーを処理します。
public class Main {
static String classify(int code) {
return switch (code / 100) {
case 2 -> "Success";
case 3 -> "Redirect";
case 4 -> "Client error";
case 5 -> "Server error";
default -> "Unknown";
};
}
public static void main(String[] args) {
System.out.println(classify(503));
System.out.println(classify(200));
}
}mapping によるボディの変換
BodyHandlers.mapping(upstream, fn) は別のハンドラーをラップし、その結果を変換します。たとえば、ハンドラー内で文字列のボディを整数の長さに解析できます。
特定のヘッダーの読み取り
レスポンスヘッダーの値を読み取るには、headers().firstValue(name) を使います。これは Optional<String> を返します。繰り返し出現するヘッダーのすべての値を取得するには、allValues(name) を使います。
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> len = Optional.of("1024");
int contentLength = len.map(Integer::parseInt).orElse(0);
System.out.println("Content-Length: " + contentLength);
}
}ハンドラーの選択
- ofString — テキストやJSONのAPI向けです。
- ofByteArray — メモリ上に保持する小さなバイナリペイロード向けです。
- ofFile — ディスクにストリーム送信する大きなダウンロード向けです。
- ofInputStream — ボディをストリームとして処理します。
- discarding — ステータスだけを取得するリクエスト向けです。
クイックチェック
応答の処理についての理解度を確認しましょう。
まとめ
HTTP 応答を解釈する方法を学びました。
- HttpResponse は
statusCode()、body()、headers()を提供します。 - BodyHandler は本文の型(String、byte[]、Path、Void、またはストリーム)を決定します。
- 大きなダウンロードには
ofFileを使用して、メモリの圧迫を避けます。 - ステータスコードは先頭の数字で分類し、成功を示す 2xx の範囲を確認します。
firstValue/allValuesでヘッダーを読み取ります。
よくある質問
「レスポンスの処理」レッスンは無料ですか?
はい。「レスポンスの処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「レスポンスの処理」で何を学びますか?
BodyHandlers とステータスコードです。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「レスポンスの処理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。