0Pricing
Java Academy · レッスン

レスポンスの処理

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. java.net.http.HttpClient
  2. 非同期リクエスト
  3. リクエストボディとヘッダー
  4. レスポンスの処理
← Java Academyに戻る