カテゴリ: Spring 更新日: 2025/10/10

Spring Bootのクエリ・フォーム・パスの値を配列・リスト・Mapで受け取る方法

Spring Bootのクエリ/フォーム/パス値バインド:配列・リスト・Mapの受け取り
Spring Bootのクエリ/フォーム/パス値バインド:配列・リスト・Mapの受け取り

先生と生徒の会話形式で理解しよう

生徒

「Spring BootでフォームやURLから値を受け取るとき、配列やリストでまとめて受け取ることってできますか?」

先生

「はい、Spring Bootではクエリパラメータやフォーム、パス変数から配列やリスト、さらにはMap形式で値を受け取ることができますよ。」

生徒

「やり方が複雑そうですね…。初心者でもわかるように教えてほしいです!」

先生

「もちろんです。実際の使い方を順番に見ていきましょう!」

1. クエリパラメータをList配列で受け取る方法

1. クエリパラメータを<code>List</code>や<code>配列</code>で受け取る方法
1. クエリパラメータをList配列で受け取る方法

Spring Bootでは、URLのクエリパラメータを配列やリストとして受け取ることができます。複数の値を同じキーで渡すと、それを配列やListにバインドしてくれます。

たとえば以下のようなURLを想定します:


http://localhost:8080/search?tag=java&tag=spring&tag=boot

このとき、Controllerでは次のように記述します:


@GetMapping("/search")
public String search(@RequestParam List<String> tagList) {
    System.out.println(tagList);
    return "searchResult";
}

あるいは配列で受け取ることも可能です:


@GetMapping("/search")
public String search(@RequestParam String[] tag) {
    for (String t : tag) {
        System.out.println(t);
    }
    return "searchResult";
}

このように、クエリパラメータに同じキーを複数指定すれば、自動的にListや配列にバインドされます。

2. フォームデータを配列・リストで受け取る方法

2. フォームデータを配列・リストで受け取る方法
2. フォームデータを配列・リストで受け取る方法

フォームのチェックボックスや複数選択の値も、Spring Bootでは配列やListでバインド可能です。

以下はHTML側のサンプルです:


<form method="post" action="/submit">
    <input type="checkbox" name="hobby" value="読書">読書<br>
    <input type="checkbox" name="hobby" value="映画">映画<br>
    <input type="checkbox" name="hobby" value="旅行">旅行<br>
    <button type="submit">送信</button>
</form>

Controllerでは次のように受け取れます:


@PostMapping("/submit")
public String submit(@RequestParam List<String> hobby) {
    System.out.println("趣味: " + hobby);
    return "result";
}

このように、@RequestParamを使うだけで配列・リストに自動的に変換されます。

3. パス変数から複数値を受け取る方法(PathVariableの応用)

3. パス変数から複数値を受け取る方法(PathVariableの応用)
3. パス変数から複数値を受け取る方法(PathVariableの応用)

通常、@PathVariableでは単一の値を受け取りますが、区切り文字(例:カンマ)を使えば複数値を一括で受け取ることができます。


http://localhost:8080/user/1,2,3

Controller側では次のように対応できます:


@GetMapping("/user/{ids}")
public String getUsers(@PathVariable String ids) {
    List<String> idList = Arrays.asList(ids.split(","));
    System.out.println("IDリスト:" + idList);
    return "userList";
}

split()で分割すれば、柔軟にリスト化できます。

4. クエリやフォームからMapで値を受け取る方法

4. クエリやフォームから<code>Map</code>で値を受け取る方法
4. クエリやフォームからMapで値を受け取る方法

動的なパラメータをまとめて受け取りたい場合は、Mapでのバインドが便利です。

以下のようなフォームがあるとします:


<form method="post" action="/profile">
    <input type="text" name="name" value="田中"><br>
    <input type="text" name="email" value="tanaka@example.com"><br>
    <button type="submit">送信</button>
</form>

Controller側でMapにまとめて受け取るには:


@PostMapping("/profile")
public String handleProfile(@RequestParam Map<String, String> formData) {
    System.out.println(formData);
    return "profileResult";
}

@RequestParam Map<String, String>を使うことで、パラメータをまとめて扱うことができます。

5. 配列・リスト・Mapのバインドの違いと使い分け

5. 配列・リスト・Mapのバインドの違いと使い分け
5. 配列・リスト・Mapのバインドの違いと使い分け

Spring Bootで配列・ListMapを使い分けるポイントは以下の通りです。

  • 配列:項目数が決まっている場合に使いやすい。
  • List:柔軟に可変長のデータを扱いたいときに最適。
  • Map:キーと値のペアで扱いたい場合や、動的な項目に対応したいときに便利。

バインドの仕組みを理解しておくことで、Spring Bootのフォーム処理やREST API開発が非常にスムーズになります。

6. バインドできないときの注意点とエラー対処法

6. バインドできないときの注意点とエラー対処法
6. バインドできないときの注意点とエラー対処法

バインドに失敗するよくある原因としては、以下のようなものがあります:

  • HTMLのname属性がControllerと一致していない
  • 配列名やリスト名のスペルミス
  • URLのクエリ形式が正しくない(例:param[]=1のような書き方)

特に、@RequestParamの指定が抜けていると400 Bad Requestになりやすいため、注意しましょう。

カテゴリの一覧へ
新着記事
Javaのラムダ式で戻り値とvoidの使い方を解説!returnの書き方も完全理解
Javaのメソッド参照とコンストラクタ参照の使い方を完全ガイド!初心者向けに::とClass::newを解説
Javaのラムダ式の書き方を徹底解説!アロー演算子->の基本と使い方
Thymeleafのth:eachの使い方!ループ回数やindexなどの繰り返し処理を学ぼう
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring Boot JPA入門:エンティティ/リポジトリの基本と作り方
No.3
Java&Spring記事人気No3
Javaの@Validアノテーションを徹底解説!初心者でもわかる入力値検証の基本
No.4
Java&Spring記事人気No4
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス