カテゴリ: Spring 更新日: 2025/12/23

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になりやすいため、注意しましょう。

まとめ

まとめ
まとめ

Spring Bootでリクエストパラメータを柔軟に受け取る重要性

この記事では、Spring Bootにおいてクエリパラメータ、フォームデータ、パス変数といった リクエストの値を、配列、List、Mapとして受け取る方法を順番に解説してきました。 Webアプリケーション開発では、画面やAPIから複数の値をまとめて扱う場面が非常に多く、 それらをどう受け取るかによって、実装の分かりやすさや保守性が大きく変わります。

Spring Bootは、この点においてとても親切な仕組みを持っており、 URLのクエリパラメータやHTMLフォームの値を、自動的に配列やListへ変換してくれます。 仕組みを知らないと難しく感じがちですが、実際には @RequestParam@PathVariable を正しく使うだけで、 ほとんどのケースに対応できるようになっています。

配列・List・Mapの使い分けを理解する

配列は、受け取る要素数がある程度決まっている場合に向いています。 一方で、チェックボックスのように選択数が変わる場合や、 将来的に項目が増える可能性がある場合には、Listを使う方が柔軟です。 Mapはさらに一歩進んだ使い方で、キーと値の組み合わせをそのまま受け取れるため、 動的なフォームや管理画面のような場面で力を発揮します。

これらの違いを理解しておくことで、「とりあえず全部Stringで受け取る」 という状態から卒業し、より読みやすく意図の伝わるControllerコードが書けるようになります。 Spring Bootのフォーム処理やREST API設計を学ぶ上で、非常に大切な基礎知識です。

バインドの仕組みをイメージする簡単な例


@PostMapping("/example")
public String example(@RequestParam List<String> values,
                      @RequestParam Map<String, String> params) {
    System.out.println(values);
    System.out.println(params);
    return "result";
}

このように、Spring Bootでは複数の受け取り方を組み合わせることも可能です。 フォームやURLで送られてきた値が、どのようにControllerの引数に バインドされるのかを意識しながらコードを書くことで、 エラーの原因も見つけやすくなります。

初心者がつまずきやすいポイントの振り返り

よくあるミスとして、HTML側の name 属性と Controller側の引数名が一致していないケースがあります。 また、配列やListで受け取りたいのに、URLやフォームの指定方法が 正しくないために、期待した値が入らないことも少なくありません。

こうした問題に直面したときは、「どんなキーで、どんな形式の値が送られているのか」 を一度落ち着いて確認することが大切です。 Spring Bootの自動バインドは便利ですが、仕組みを理解してこそ 本当の意味で使いこなせるようになります。

先生と生徒の振り返り会話

生徒

「クエリやフォームの値って、全部Stringで受け取るものだと思っていましたが、 ListやMapで受け取れると、コードがすごく分かりやすくなりますね。」

先生

「そうですね。Spring Bootは、リクエストパラメータの扱いがとても柔軟なので、 目的に合った型で受け取ることが大切です。」

生徒

「配列、List、Mapの使い分けを意識するだけで、 Controllerの処理が整理される気がしました。」

先生

「その感覚はとても良いですね。フォーム処理やAPI開発では、 今日学んだ内容がそのまま実務につながっていきますよ。」

生徒

「次はDTOにまとめて受け取る方法にも挑戦してみたいです!」

先生

「ぜひ挑戦してください。今日の基礎がしっかり理解できていれば、 さらに一歩進んだSpring Boot開発もスムーズに学べますよ。」

Springの学習を効率化したい方へ

この記事の内容をもっと深く知るには、以下の入門書が最適です。

Spring Framework超入門をAmazonで見る
カテゴリの一覧へ
新着記事
New1
Java
Javaのラムダ式で注意したい変数キャプチャの落とし穴とは?代入と変数名のベストプラクティス解説
更新記事
New2
Spring
Springの@GetMappingアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.4
Java&Spring記事人気No4
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.5
Java&Spring記事人気No5
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.6
Java&Spring記事人気No6
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説