Spring の@RequestParamの使い方!テキストボックス、ラジオボタン、チェックボックス、セレクトボックスの値を受け取る。
生徒
「Spring Bootでフォームからデータを受け取る方法がわからないんですけど、教えてもらえますか?」
先生
「もちろん!Spring Bootでは、Thymeleafを使って簡単にフォームを作成し、データを受け取ることができます。フォームの作成と処理の流れを一緒に見ていきましょう。」
生徒
「具体的には、テキストボックスやラジオボタン、セレクトボックス、チェックボックスのデータを受け取りたいんです。」
先生
「了解です。それでは、それぞれのフォーム入力の方法と受け取り方を解説しますね!」
1. Spring BootとThymeleafでフォームを作成する
ここでは、Spring BootにThymeleafを追加し、最小構成の入力フォームを表示するところまでを丁寧に作ります。ポイントは「テンプレートを用意→コントローラで表示→POST先を決める」の3段階です。用語はかみ砕いて説明するので、プログラミング未経験でも大丈夫です。
ステップ1:Thymeleafをプロジェクトに入れる
Thymeleafは「HTMLに変数を差し込める仕組み(テンプレートエンジン)」です。Spring公式のスターターを1行足すだけで使えます。
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
ステップ2:フォーム画面(テンプレート)を用意する
テンプレートは src/main/resources/templates 配下に置きます。まずは画面を表示するだけの最小フォームを作り、送信先は後述のURL(/submit)にしておきます。
<!-- templates/form.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>フォームの基本</title>
</head>
<body>
<!-- th:action で送信先URL、th:method でHTTPメソッドを指定 -->
<form th:action="@{/submit}" th:method="post">
<!-- ここに入力欄を増やしていける(例:name, gender など) -->
<button type="submit">送信</button>
</form>
</body>
</html>
ステップ3:画面を表示するコントローラを作る
コントローラは「どのURLでどの画面を返すか」を決める役です。ここでは /form にアクセスされたら form.html を返すだけ。フォームの送信先(/submit)は後で処理を書き足せます。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class FormViewController {
@GetMapping("/form")
public String showForm() {
// templates/form.html を表示
return "form";
}
}
以上で、/form にアクセスするとThymeleafのフォーム画面が表示され、th:action="@{/submit}" によって「送信ボタンでPOSTする」という動きができました。ここまで作れれば、あとは入力欄を足していき、@RequestParamで値を受け取る処理を段階的に追加できます。
2. テキストボックスの値を受け取る
まずは一番基本となる「テキストボックス」の受け取り方です。名前やメールアドレスなど、ユーザーが自由に文字を入力する場面でよく使います。実際に入力フォームを用意して、送信した文字をコントローラーで受け取ってみましょう。
<!-- Thymeleafテンプレート: form.html -->
<form th:action="@{/submit}" th:method="post">
<label for="name">お名前を入力してください:</label>
<input type="text" id="name" name="name" placeholder="例:山田太郎" />
<button type="submit">送信</button>
</form>
ポイントは、name="name" のようにフォーム側で付けた「name属性」と、Spring側で受け取る@RequestParam("name")が一致していることです。これが同じになっていないと、値が正しく受け取れません。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class FormController {
@PostMapping("/submit")
public String submitForm(@RequestParam("name") String name) {
// ここで受け取った値を確認
System.out.println("入力された名前: " + name);
// 次の画面(result.html)へ遷移
return "result";
}
}
例えば、フォームに「山田太郎」と入力して送信すると、コンソールには 入力された名前: 山田太郎 と表示されます。非常にシンプルですが、Webアプリではもっともよく使う基本テクニックです。テキストボックスを追加するだけで、好きな項目を受け取れるようになります。
3. ラジオボタンの値を受け取る
ラジオボタンは「どれか1つだけ選んで送信してほしい」ときに使います。例えば、性別や支払い方法など、複数の候補の中から必ず1つに絞ってもらう場面でよく使われます。まずは、簡単な性別選択のフォームを作ってみましょう。
<!-- Thymeleafテンプレート: form.html -->
<form th:action="@{/submit}" th:method="post">
<label>性別を選択してください:</label><br>
<input type="radio" id="male" name="gender" value="male" />
<label for="male">男性</label><br>
<input type="radio" id="female" name="gender" value="female" />
<label for="female">女性</label><br>
<button type="submit">送信</button>
</form>
ポイントは、どちらのラジオボタンも同じ name="gender" を持っていることです。こうすることで、ユーザーがチェックした方の値だけがサーバーへ送られます。
続いて、Spring Boot側のコントローラーです。送信された性別の値を、@RequestParamで受け取ります。
@PostMapping("/submit")
public String submitForm(@RequestParam("gender") String gender) {
// 選ばれたラジオボタンの値を表示して確認
System.out.println("選択された性別: " + gender);
return "result";
}
例えば、「女性」を選んで送信すると、コンソールには 選択された性別: female と出力されます。とてもシンプルですが、ラジオボタンを使った入力処理の基本です。同じname属性を使うことだけ覚えておけば、自由に選択肢を増やしていけます。
4. セレクトボックスの値を受け取る
セレクトボックスを使えば、ユーザーに複数の選択肢から一つを選んでもらうことができます。以下の例を見てみましょう。
<!-- Thymeleafテンプレート: form.html -->
<form th:action="@{/submit}" th:method="post">
<label for="country">国:</label>
<select id="country" name="country">
<option value="japan">日本</option>
<option value="usa">アメリカ</option>
<option value="uk">イギリス</option>
</select>
<button type="submit">送信</button>
</form>
そして、Spring Bootのコントローラー側は以下のようにします。
@PostMapping("/submit")
public String submitForm(@RequestParam("country") String country) {
System.out.println("国: " + country);
return "result";
}
これで、ユーザーが選択した国の値を受け取ることができます。
5. チェックボックスの値を受け取る
チェックボックスを使うと、ユーザーに複数のオプションを選ばせることができます。例えば、以下のように実装します。
<!-- Thymeleafテンプレート: form.html -->
<form th:action="@{/submit}" th:method="post">
<label>趣味:</label>
<input type="checkbox" name="hobby" value="sports" /> スポーツ
<input type="checkbox" name="hobby" value="music" /> 音楽
<input type="checkbox" name="hobby" value="reading" /> 読書
<button type="submit">送信</button>
</form>
チェックボックスの値を受け取る際、複数の選択肢がある場合は、以下の2つのパターンでコントローラー側で処理することができます。
1. Listで受け取るパターン
最初に、Listを使った方法です。
@PostMapping("/submit")
public String submitForm(@RequestParam("hobby") List<String> hobbies) {
System.out.println("趣味: " + hobbies);
return "result";
}
複数の趣味が選択された場合、それらがリストとしてコントローラーに渡されます。例えば、ユーザーが「スポーツ」と「音楽」を選択した場合、コンソールには以下のように表示されます。
趣味: [sports, music]
2. 配列で受け取るパターン
次に、String[]を使った方法です。
@PostMapping("/submit")
public String submitForm(@RequestParam("hobby") String[] hobbies) {
System.out.println("趣味: " + Arrays.toString(hobbies));
return "result";
}
この場合も、ユーザーが選択した複数の値が配列として受け取れます。配列の要素をArrays.toString()メソッドで表示すれば、以下のように出力されます。
趣味: [sports, music]
どちらの方法も、複数のチェックボックスの値を簡単に処理するのに便利です。フォームの内容に応じて使い分けてください。
6. @RequestParamのrequired・defaultValueで「未入力」を安全に扱う
フォームで未入力だった場合にエラーを出さずに受け取りたいときは、@RequestParamのrequiredやdefaultValueを使います。Spring Bootでは、テキストボックスやラジオボタン、チェックボックスの値が送信されないケースでも、安全に処理できます。
<!-- Thymeleaf: ageは未入力でもOK -->
<form th:action="@{/submit/optional}" th:method="post">
<label for="age">年齢(任意):</label>
<input type="number" id="age" name="age" />
<label class="ms-3" for="nick">ニックネーム(任意):</label>
<input type="text" id="nick" name="nickname" />
<button type="submit">送信</button>
</form>
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class OptionalParamController {
// defaultValue を指定すると required は自動的に無視される(必須ではなくなる)
@PostMapping("/submit/optional")
public String submitOptional(
@RequestParam(name = "age", defaultValue = "0") int age, // 未入力→0
@RequestParam(name = "nickname", required = false) String nickname // 未入力→null
) {
System.out.println("age=" + age + ", nickname=" + nickname);
return "result";
}
}
intのようなプリミティブ型はnullを受け取れないため、defaultValueで初期値を入れておくのが実務では安全です。Stringはnull許容なのでrequired=falseで十分です。
7. パラメータ名の変更(name/valueエイリアス)でフォーム名と受取名を切り分ける
テンプレート側のname属性と、コントローラー側の変数名を分けたい場合は、@RequestParam(name="...")(またはvalue)を使います。@RequestParamの使い方としてSEOでもよく検索される実装ポイントです。
<!-- フロント側では user_name という名前で送る -->
<form th:action="@{/submit/alias}" th:method="post">
<label for="user_name">お名前:</label>
<input type="text" id="user_name" name="user_name" />
<button type="submit">送信</button>
</form>
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class AliasParamController {
@PostMapping("/submit/alias")
public String submitAlias(
@RequestParam(name = "user_name") String name // HTMLの user_name を name で受け取る
// @RequestParam(value = "user_name") でもOK
) {
System.out.println("name=" + name);
return "result";
}
}
既存フォームのパラメータ名を変えられないときや、サーバー側で読みやすい命名にしたいときに便利です。
8. セレクトボックス(multiple)で複数値を受け取る
セレクトボックスにmultiple属性を付けると、チェックボックスと同様に複数の値を選択・送信できます。List<String>やString[]で受け取るのが@RequestParamの基本パターンです。
<!-- 複数選択可能なセレクトボックス -->
<form th:action="@{/submit/multi-select}" th:method="post">
<label for="skills">スキル(複数選択可):</label>
<select id="skills" name="skills" multiple size="5">
<option value="java">Java</option>
<option value="spring">Spring</option>
<option value="thymeleaf">Thymeleaf</option>
<option value="docker">Docker</option>
<option value="aws">AWS</option>
</select>
<button type="submit">送信</button>
</form>
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class MultiSelectController {
@PostMapping("/submit/multi-select")
public String submitMultiSelect(@RequestParam("skills") List<String> skills) {
System.out.println("skills=" + skills);
return "result";
}
}
複数選択が未選択(=送信なし)の場合に備えるなら、required=false+空リスト代入などの対策も検討しましょう。
9. 数値・真偽値・日付・Enumへの型変換(@DateTimeFormat対応)
Spring Bootは@RequestParamの値を自動的に型変換できます。数値、真偽値、日付、Enumにそのままマッピングして、入力チェックの前段を簡潔に書けます。
<form th:action="@{/submit/convert}" th:method="post">
<label for="age2">年齢:</label>
<input type="number" id="age2" name="age" />
<label class="ms-3" for="agree">利用規約に同意:</label>
<!-- 未チェックで送られない問題を避けるためのhidden(Boolean対策) -->
<input type="hidden" name="agree" value="false" />
<input type="checkbox" id="agree" name="agree" value="true" />
<label class="ms-3" for="birthday">生年月日:</label>
<input type="date" id="birthday" name="birthday" />
<label class="ms-3" for="level">レベル:</label>
<select id="level" name="level">
<option value="BASIC">BASIC</option>
<option value="ADVANCED">ADVANCED</option>
<option value="EXPERT">EXPERT</option>
</select>
<button type="submit" class="ms-3">送信</button>
</form>
import java.time.LocalDate;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class ConvertParamController {
public enum Level { BASIC, ADVANCED, EXPERT }
@PostMapping("/submit/convert")
public String submitConvert(
@RequestParam("age") Integer age, // 未入力ならnull(必要なら defaultValue で初期化)
@RequestParam(name = "agree", defaultValue = "false") boolean agree, // hidden で常に送信
@RequestParam("level") Level level, // 文字列→Enumへ自動変換
@RequestParam("birthday")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate birthday // yyyy-MM-dd
) {
System.out.println("age=" + age + ", agree=" + agree + ", level=" + level + ", birthday=" + birthday);
return "result";
}
}
このように型変換を活用すると、Thymeleafフォームからの値を@RequestParamで受け取り、後続のバリデーションやビジネスロジックをシンプルに書けます。
まとめ
Springの@RequestParamは、HTMLフォームやThymeleafから送信されたリクエストパラメータを、Spring Bootのコントローラーで受け取るための基本的なアノテーションです。テキストボックス、ラジオボタン、チェックボックス、セレクトボックスなど、フォームにはさまざまな入力部品がありますが、どの入力部品でも重要になるのは、フォーム側のname属性とコントローラー側の@RequestParamで指定する名前を一致させることです。この対応関係を理解すると、Spring Bootでフォームの値を受け取る流れが分かりやすくなります。
基本の流れは、Thymeleafで<form>を作成し、<input>や<select>などへname属性を指定して送信し、Spring Bootのコントローラーで@RequestParamを使って値を受け取るという形です。テキストボックスやラジオボタンのように一つの値を送信する場合はStringなどで受け取り、チェックボックスや複数選択のセレクトボックスのように複数の値が送られる場合はListや配列で受け取ります。入力部品ごとの違いを覚えるだけでなく、ブラウザからどのようなパラメータが送信されるのかを意識することが大切です。
@RequestParamとname属性の関係を理解しよう
@RequestParamを使ううえで最も基本になるのが、HTML側のname属性です。たとえばテキストボックスにname="name"を指定すると、フォーム送信時にはnameというパラメータ名で入力値が送信されます。Spring Boot側では@RequestParam("name")と書くことで、その値を受け取れます。フォーム側とJava側で名前が一致していなければ、期待した値を取得できません。
<form th:action="@{/submit}" th:method="post">
<label for="name">お名前</label>
<input type="text" id="name" name="name">
<button type="submit">送信</button>
</form>
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class FormController {
@PostMapping("/submit")
public String submit(@RequestParam("name") String name) {
System.out.println("入力された名前: " + name);
return "result";
}
}
この例では、フォームのname="name"とJava側の@RequestParam("name")が対応しています。変数名そのものは別の名前にすることもできます。HTML側では既存のパラメータ名を変更できない場合でも、@RequestParam(name = "user_name") String nameのように書けば、送信される名前とJavaの変数名を分けられます。既存システムとの連携や、フロント側とサーバー側で命名規則が異なる場合にも便利です。
テキストボックスは一つの値を受け取る基本形
テキストボックスは、名前、メールアドレス、検索キーワードなど、利用者が自由に文字を入力する場合に使います。通常は一つの入力欄から一つの値が送信されるため、Stringで受け取る基本形を最初に覚えるとよいでしょう。数値を入力する項目であれば、Springの型変換を利用してIntegerなどで受け取ることもできます。
フォームから送られてくる値は、画面で何が表示されているかではなく、入力部品のname属性を基準に送信されます。そのため、画面上のラベルが「お名前」であっても、name="username"ならSpring側ではusernameという名前で受け取ります。画面表示用の文字と送信用のパラメータ名を区別して考えると、フォーム処理の仕組みが整理しやすくなります。
ラジオボタンでは同じname属性を使う
ラジオボタンは、複数の候補から一つだけを選択してもらう入力部品です。性別、支払い方法、会員種別など、一つだけ選んでほしい場面で利用できます。ラジオボタンでは、同じグループにする選択肢へ同じname属性を設定します。そして、それぞれの選択肢に異なるvalueを設定すると、選択されたものの値だけがサーバーへ送信されます。
たとえば男性と女性の選択肢にどちらもname="gender"を指定し、valueをそれぞれ異なる値にしておけば、コントローラーでは@RequestParam("gender") String genderとして一つの値を受け取れます。ラジオボタンでは、同じグループにしたい項目のnameをそろえることが大切です。
セレクトボックスではoptionのvalueが送信される
セレクトボックスは、あらかじめ用意した候補の中から選択してもらう入力部品です。国、都道府県、カテゴリ、権限、部署などの選択でよく利用されます。通常の一件選択では、<select>へ設定したname属性の名前で、選択された<option>のvalueが送信されます。
画面上では「日本」と表示していても、value="japan"を指定していれば、Spring側で受け取る値はjapanです。利用者に見せる文字とサーバーへ送る値を分けられるため、データベースのコード値や識別子を送信する場合にも使いやすい仕組みです。
チェックボックスでは複数の値をListや配列で受け取る
チェックボックスは、複数の候補を同時に選択できる入力部品です。趣味、興味のある分野、利用したい機能など、複数回答を許可するフォームに向いています。同じ項目としてまとめるチェックボックスには同じname属性を指定し、各選択肢に異なるvalueを設定します。
複数の値が同じパラメータ名で送られるため、Spring Boot側ではList<String>やString[]のような複数要素を扱える型で受け取ります。二つの趣味を選択すれば二つの値が入り、三つ選択すれば三つの値が入ります。単一選択のラジオボタンとの違いを理解すると、受け取るJavaの型も選びやすくなります。
import java.util.List;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@PostMapping("/hobby")
public String hobby(
@RequestParam(name = "hobby", required = false) List<String> hobbies) {
if (hobbies != null) {
for (String hobby : hobbies) {
System.out.println(hobby);
}
}
return "result";
}
チェックボックスでは、一つも選択されていない場合にパラメータそのものが送信されないことがあります。そのため、未選択を許可するフォームではrequired = falseを指定するなど、値が送られない場合も想定して処理することが重要です。
requiredとdefaultValueで未入力を安全に扱おう
@RequestParamは、通常は指定したパラメータを必須として扱います。しかし、任意入力の項目や、未選択でも送信できる画面では、パラメータが存在しない場合を考える必要があります。そのときに使えるのがrequiredとdefaultValueです。
required = falseを指定すると、対象のパラメータが送られてこなくても受け取れるようになります。文字列を受け取る場合は、値が存在しないとnullになることがあります。一方、未入力時に決められた初期値を使いたい場合はdefaultValueを指定できます。年齢のような数値項目で未入力時に零として扱いたい場合など、処理の目的に応じて使い分けます。
特にプリミティブ型はnullを保持できないため、未入力の可能性がある項目では初期値を設定したり、Integerのようなラッパークラスを利用したりする考え方も大切です。フォームは必ずすべてのパラメータが送信されるとは限らないという前提で作ると、入力条件の変化にも対応しやすくなります。
multiple付きセレクトボックスも複数値として扱う
セレクトボックスにmultiple属性を付けると、一つだけではなく複数の項目を選択できるようになります。この場合の考え方はチェックボックスと似ており、同じパラメータ名で複数の値が送信されるため、List<String>や配列で受け取ります。
たとえばJava、Spring、Thymeleafなどの利用経験を複数選択してもらうフォームでは、選択された項目を一覧として受け取り、その後の登録処理や検索条件へ利用できます。単一選択か複数選択かによって、コントローラー側で受け取る型を変えるという考え方を覚えておきましょう。
数値や日付などへの型変換も活用できる
@RequestParamで受け取る値は、必ずStringにしなければならないわけではありません。Springには型変換の仕組みがあるため、数字をIntegerへ変換したり、真偽値をbooleanで受け取ったり、決められた文字列を列挙型として受け取ったりできます。生年月日のような日付についても、形式を指定してLocalDateとして扱う方法があります。
型変換を利用すると、コントローラーで文字列を受け取ったあとに毎回変換処理を書く必要を減らせます。ただし、数字として受け取る項目へ数字以外の値が送られるなど、変換できない入力が来る可能性も考えておく必要があります。型変換は入力値の正しさをすべて保証するものではないため、必要に応じてバリデーションやエラー処理と組み合わせましょう。
@RequestParamとフォームオブジェクトの使い分けも意識しよう
@RequestParamは、一つや数個のパラメータを直接受け取りたい場合に分かりやすい方法です。検索キーワード、ページ番号、並び順、単純な選択値などを受け取るときには、何を受け取っているのかがメソッドの引数から分かりやすいという利点があります。
一方で、入力項目が十個、二十個と増えてくると、コントローラーの引数へ大量の@RequestParamを書くと読みづらくなります。そのような場合はフォームクラスやDTOへまとめ、@ModelAttributeなどで受け取る方法も検討できます。まずは@RequestParamで一つずつ値を受け取る仕組みを理解し、その後で複数項目をオブジェクトへまとめる方法を学ぶと、Spring MVCのデータバインドを段階的に理解できます。
受け取れないときはname属性と送信内容を確認しよう
@RequestParamで値を受け取れない場合は、最初にフォーム側のname属性とJava側のパラメータ名が一致しているか確認します。次に、フォームの送信先が正しいか、HTTPメソッドがコントローラーのマッピングと一致しているかを確認します。POSTで送信しているのにGET用のメソッドしか用意されていない場合などは、期待した処理には到達しません。
さらに、ラジオボタンやチェックボックスでは実際に選択されているか、セレクトボックスではどのvalueが送られているかも確認します。ブラウザの開発者ツールを利用すると、リクエストにどのようなパラメータが含まれているかを確認できます。Spring側のコードだけを見て悩むのではなく、フォームから何が送られているのかまで確認すると原因を見つけやすくなります。
Spring Bootフォーム処理の基本として身に付けよう
Spring BootとThymeleafを使ったフォーム処理では、画面に入力部品を作り、name属性を付け、フォームを送信し、コントローラーで@RequestParamを使って受け取るという流れが基本です。テキストボックス、ラジオボタン、通常のセレクトボックスは一つの値として受け取り、チェックボックスや複数選択のセレクトボックスは複数値として受け取ります。
さらに、未入力の可能性がある場合はrequiredやdefaultValueを利用し、必要であれば数値、日付、列挙型などへの型変換も活用します。こうした基本を理解すると、お問い合わせフォーム、検索フォーム、アンケート、商品検索、会員登録、設定画面など、多くのWebアプリケーションへ応用できます。
@RequestParamを学ぶときに大切なのは、アノテーションの書き方だけを暗記することではありません。ブラウザがどの名前でどの値を送信し、それをSpring Bootがどの型で受け取るのかという一連の流れを理解することが重要です。フォーム側のname、送信されるvalue、コントローラー側の@RequestParam、Javaの受け取り型を一つずつ対応させて考えられるようになると、フォーム処理で発生する問題にも対応しやすくなります。
生徒
「今回の記事で、@RequestParamはフォームから送られた値をSpring Bootのコントローラーで受け取るために使うと分かりました。」
先生
「はい。最初に覚えたいのは、フォーム側のname属性と@RequestParamで指定する名前の対応です。ここがフォーム処理の基本になります。」
生徒
「テキストボックスなら、name="name"で送った値を@RequestParam("name")で受け取るということですね。」
先生
「そのとおりです。ラジオボタンやセレクトボックスでも基本は同じで、送信されたパラメータ名と値を受け取ります。」
生徒
「ラジオボタンでは、同じグループの選択肢に同じnameを付けて、選ばれた一つのvalueが送られるんですね。」
先生
「はい。表示されている文字ではなく、実際にはvalueに設定した値が送信されることも覚えておきましょう。」
生徒
「チェックボックスは複数選択できるので、Listや配列で受け取るところが違うんですね。」
先生
「そうです。複数の値が同じパラメータ名で送られるため、複数要素を扱える型で受け取ります。複数選択のセレクトボックスも同じ考え方です。」
生徒
「チェックボックスを一つも選ばなかった場合などは、パラメータが送られないこともあるんですよね。」
先生
「はい。そのような項目ではrequired = falseを使うなど、未選択の場合を考えておくことが大切です。」
生徒
「未入力時に決まった値を使いたいならdefaultValueも使えるんですね。」
先生
「そのとおりです。必須にするのか、未入力を許可するのか、初期値を使うのかをフォームの仕様に合わせて決めましょう。」
生徒
「文字列だけではなく、年齢をInteger、日付をLocalDateのように受け取ることもできるんですね。」
先生
「はい。Springの型変換を利用できます。ただし、変換できない値が送られた場合も考え、必要に応じて入力値検証やエラー処理を組み合わせましょう。」
生徒
「フォームの項目が少ないうちは@RequestParamが分かりやすいですが、項目がたくさん増えたらフォームクラスにまとめる方法もあるんですね。」
先生
「そうです。まずは@RequestParamで一つずつ受け取る仕組みを理解し、そのあとでフォームオブジェクトへ進むとSpring MVCの仕組みを理解しやすくなります。」
生徒
「値が受け取れないときは、Java側だけではなく、フォームのnameや送信先、送信されている値も確認すればよいですか。」
先生
「はい。ブラウザから何が送られ、Springが何を受け取ろうとしているのかを順番に確認すると、原因を見つけやすくなります。」
生徒
「まずはテキストボックス、ラジオボタン、チェックボックス、セレクトボックスを一つのフォームに作って、それぞれ@RequestParamで受け取る練習をしてみます。」
先生
「その練習が分かりやすいです。入力部品ごとに何というパラメータ名で、どの値が送られるのかを確認しながら作れば、Spring Bootのフォーム処理をしっかり身に付けられます。」
この記事を読んだ人からの質問
プログラミング初心者からのよくある疑問/質問を解決します
Spring Bootでフォームを作成するにはどのようにThymeleafを使えばいいですか?
ThymeleafはHTMLテンプレートエンジンで、フォームを作成する際にth:actionやth:methodなどの属性を使います。これにより、Spring Bootのコントローラーと連携してデータを簡単に送信できます。
フォームのテキストボックスで入力された値を受け取る方法を教えてください。
テキストボックスで入力された値は、@RequestParamを使用してSpring Bootのコントローラーで受け取ることができます。フォームのname属性と@RequestParamの引数名を一致させることが重要です。
ラジオボタンの値をSpring Bootで取得するにはどうすればいいですか?
ラジオボタンの値も@RequestParamを使用して受け取ります。ラジオボタンのname属性が同じで、value属性が異なることで選択された値が送信されます。
セレクトボックスから選択された値を取得する方法を教えてください。
セレクトボックスのname属性に基づいて、@RequestParamで値を取得します。選択肢のvalue属性に設定した値が送信されます。
チェックボックスの複数の値を受け取るにはどのようにすればいいですか?
チェックボックスの値を受け取るには、@RequestParamをListやString[]の形式で使用します。選択された値がリストや配列で取得できます。
フォームデータを送信する際に使うth:actionとth:methodの役割は何ですか?
th:actionはデータを送信するURLを指定し、th:methodはHTTPメソッド(POSTやGETなど)を指定します。これにより、フォームが正しいエンドポイントにデータを送信できます。
Spring Bootでフォームの送信後にどのようにデータを処理しますか?
フォーム送信後、Spring Bootのコントローラーでデータを受け取り、必要な処理を行います。受け取ったデータは、ビジネスロジックに渡すか、ビューに表示させることができます。
チェックボックスの値が複数選択される場合、すべての値を受け取るにはどうすればいいですか?
複数の値を受け取るには、@RequestParamを使い、リストや配列で値を取得します。例えば、チェックボックスのname属性が同じ場合、選択された値がすべてリストや配列として渡されます。
フォーム送信時に値が空の場合、Spring Bootでエラーを防ぐ方法はありますか?
エラーを防ぐには、@RequestParamにrequired=falseを指定したり、デフォルト値を設定する方法があります。また、入力値の検証にはバリデーションを活用するのがおすすめです。
Spring BootとThymeleafを使ったフォーム開発のメリットは何ですか?
Spring BootとThymeleafを使うと、バックエンドとフロントエンドがスムーズに連携し、動的なデータ表示やフォーム処理が簡単に行えます。また、コードがシンプルで保守性が高いのもメリットです。
プリミティブ型(int/boolean)とラッパー型(Integer/Boolean)はどちらを使うべきですか?
未入力(null)を扱う可能性があるならラッパー型を推奨します。プリミティブ型はnull非対応のため、defaultValueで初期値を入れるか、ラッパー型+required=falseで安全に受け取りましょう。
defaultValueは空文字(name=)にも適用されますか?
はい。パラメータが未指定または値が空の場合にdefaultValueが適用されます。空文字が来てもデフォルトへフォールバックできます。
required=trueとdefaultValueを同時に指定したらどうなりますか?
defaultValueが優先され、実質的に必須ではなくなります。必須エラーを出したい場合はdefaultValueを外してください。
任意パラメータを「未入力」と「空文字」で区別したいときは?
Optional<String>やラッパー型+明示的チェックを使います。例:param == nullなら未指定、param.isEmpty()なら空文字、というように分岐可能です。
複数の任意パラメータをまとめて扱う良い方法はありますか?
@RequestParam Map<String,String>で一括受け取り、存在チェックとデフォルト適用を同一ロジックで処理するのがシンプルです。後から項目が増えても拡張しやすくなります。
ChatGPTなどの生成AIをこれから学びたい方に向けて、AIスキルアカデミーの口コミ・評判、料金、無料セミナーの内容を詳しくまとめています。
AIスキルアカデミーの口コミ・評判を詳しく見る