Java : HttpHeaders (HTTP通信) - API使用例

HttpHeaders (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

一連のHTTPヘッダーの読み取り専用ビュー。

クラス構成

HttpHeaders は HTTP通信のリクエストおよびレスポンスのHTTPヘッダを表します。
HttpRequestHttpResponseheaders() メソッドから取得できます。

final var uri = URI.create("https://example.com/");

final var request = HttpRequest.newBuilder(uri)
        .POST(HttpRequest.BodyPublishers.ofString("xyz"))
        .header("Content-Type", "text/plain; charset=utf-8")
        .header("Content-Language", "en")
        .build();

System.out.println(request); // https://example.com/ POST

final var headers = request.headers();

// {Content-Language=[en], Content-Type=[text/plain; charset=utf-8]}
System.out.println(headers.map());

メソッド

List<String> allValues (String name)

指定された名前付きヘッダーのすべてのヘッダー文字列値の変更不可リストを返します。

final var uri = URI.create("https://example.com/");

final var request = HttpRequest.newBuilder(uri)
        .header("aaa", "X")
        .header("bbb", "Y1")
        .header("bbb", "Y2")
        .header("ccc", "Z")
        .build();

final var headers = request.headers();

System.out.println(headers.allValues("aaa")); // [X]
System.out.println(headers.allValues("bbb")); // [Y1, Y2]
System.out.println(headers.allValues("ccc")); // [Z]
System.out.println(headers.allValues("ddd")); // []

final boolean equals (Object obj)

このHTTPヘッダー・インスタンスが指定されたオブジェクトと等しいかどうかをテストします。

final var headers1 = HttpHeaders.of(
        Map.of(
                "aaa", List.of("X1", "X2"),
                "bbb", List.of("Y")
        ),
        (n, v) -> true);

final var headers2 = HttpHeaders.of(
        Map.of(
                "aaa", List.of("X1", "X2"),
                "bbb", List.of("Y")
        ),
        (n, v) -> true);

final var headers3 = HttpHeaders.of(
        Map.of(
                "aaa", List.of("X1", "X2"),
                "ccc", List.of("Z")
        ),
        (n, v) -> true);

System.out.println(headers1.equals(headers2)); // true
System.out.println(headers1.equals(headers3)); // false

Optional<String> firstValue (String name)

指定された(おそらく多値)ヘッダーの最初のヘッダー文字列値を含むOptionalを返します。

final var uri = URI.create("https://example.com/");

final var request = HttpRequest.newBuilder(uri)
        .header("aaa", "X")
        .header("bbb", "Y1")
        .header("bbb", "Y2")
        .build();

final var headers = request.headers();

System.out.println(headers.firstValue("aaa")); // Optional[X]
System.out.println(headers.firstValue("bbb")); // Optional[Y1]
System.out.println(headers.firstValue("ccc")); // Optional.empty

OptionalLong firstValueAsLong (String name)

指定されたヘッダー・フィールドの最初のヘッダー文字列値を含むOptionalLongを返します。

final var uri = URI.create("https://example.com/");

final var request = HttpRequest.newBuilder(uri)
        .header("aaa", "123")
        .header("bbb", "456")
        .header("bbb", "789")
        .build();

final var headers = request.headers();

System.out.println(headers.firstValueAsLong("aaa")); // OptionalLong[123]
System.out.println(headers.firstValueAsLong("bbb")); // OptionalLong[456]
System.out.println(headers.firstValueAsLong("ccc")); // OptionalLong.empty

final int hashCode ()

このHTTPヘッダー・インスタンスのハッシュ・コードを計算します。

final var headers1 = HttpHeaders.of(
        Map.of(
                "aaa", List.of("X1", "X2"),
                "bbb", List.of("Y")
        ),
        (n, v) -> true);

final var headers2 = HttpHeaders.of(
        Map.of(
                "ccc", List.of("Z")
        ),
        (n, v) -> true);

final var headers3 = HttpHeaders.of(
        Map.of(
                "ddd", List.of("123")
        ),
        (n, v) -> true);

System.out.println(headers1.hashCode()); // 107261
System.out.println(headers2.hashCode()); // 98426
System.out.println(headers3.hashCode()); // 81333

Map<String,List<String>> map ()

このHttpHeadersの変更不可能なマルチ・マップ・ビューを返します。

final var uri = URI.create("https://example.com/");

final var request = HttpRequest.newBuilder(uri)
        .header("aaa", "X")
        .header("bbb", "Y1")
        .header("bbb", "Y2")
        .header("ccc", "Z")
        .build();

final var headers = request.headers();
final var map = headers.map();

System.out.println("-- for --");
for (final var entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

// 結果
// ↓
//-- for --
//aaa : [X]
//bbb : [Y1, Y2]
//ccc : [Z]

static HttpHeaders of (Map<String,List<String>> headerMap, BiPredicate<String,String> filter)

指定されたマップからHTTPヘッダーを返します。

final var headerMap = Map.of(
        "aaa", List.of("X"),
        "bbb", List.of("Y1", "Y2"),
        "ccc", List.of("Z")
);

final var headers1 = HttpHeaders.of(headerMap, (n, v) -> true);
System.out.println(headers1.map()); // {aaa=[X], bbb=[Y1, Y2], ccc=[Z]}

final var headers2 = HttpHeaders.of(headerMap, (n, v) -> false);
System.out.println(headers2.map()); // {}

final var headers3 = HttpHeaders.of(headerMap,
        (name, value) -> !name.equals("aaa"));
System.out.println(headers3.map()); // {bbb=[Y1, Y2], ccc=[Z]}

final var headers4 = HttpHeaders.of(headerMap,
        (name, value) -> value.equals("Z"));
System.out.println(headers4.map()); // {ccc=[Z]}

final var headers5 = HttpHeaders.of(headerMap,
        (name, value) -> value.equals("Y2"));
System.out.println(headers5.map()); // {bbb=[Y2]}

String toString ()

このHTTPヘッダーを文字列として返します。

final var uri = URI.create("https://example.com/");

final var request = HttpRequest.newBuilder(uri)
        .header("aaa", "X")
        .header("bbb", "Y1")
        .header("bbb", "Y2")
        .header("ccc", "Z")
        .build();

final var headers = request.headers();

// java.net.http.HttpHeaders@31790 { {aaa=[X], bbb=[Y1, Y2], ccc=[Z]} }
System.out.println(headers.toString());

関連記事

ページの先頭へ