@RequestParamでURLの値を取得する方法を初心者向けにやさしく解説!
新人
「Spring Bootで、URLの末尾にある値をコントローラで取得したいんですけど、どうすればいいですか?」
先輩
「それなら@RequestParamというアノテーションを使うと、URLのクエリパラメータを簡単に取得できるよ。」
新人
「クエリパラメータってなんですか?よくわかりません……」
先輩
「じゃあ、まずはURLの値についてから順番に説明していこう!」
1. URLの値(クエリパラメータ)とは?
Webアプリケーションでは、URLの末尾に「?キー=値」の形式でデータを渡すことができます。これを「クエリパラメータ」と呼びます。例えば、以下のようなURLを見てみましょう。
http://localhost:8080/hello?name=Tanaka
この例では、「name=Tanaka」という部分がクエリパラメータです。つまり「name」という名前で「Tanaka」という値が渡されています。
2. Spring BootでURLの値を取得する基本的な方法
Spring Bootでは、クエリパラメータを取得するために、@RequestParamというアノテーションを使用します。これは、コントローラクラス内で使うことで、URLのパラメータを簡単に取得できる便利な仕組みです。
例えば、以下のようなコードでパラメータを受け取れます。
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(@RequestParam String name, Model model) {
model.addAttribute("message", "こんにちは、" + name + "さん!");
return "hello";
}
}
この場合、http://localhost:8080/hello?name=Tanaka にアクセスすると、name に「Tanaka」という文字列が入ります。
3. @RequestParamの使い方と基本の書き方
@RequestParamは、コントローラのメソッド引数に付けて使用します。基本の書き方は次の通りです。
@RequestParam 型 変数名
具体的な例を見てみましょう。
@GetMapping("/greet")
public String greet(@RequestParam String user, Model model) {
model.addAttribute("greeting", "ようこそ、" + user + "さん");
return "greet";
}
このように書くことで、URLの「?user=値」の部分を受け取ることができます。
URLの例:http://localhost:8080/greet?user=Sato にアクセスすると、「ようこそ、Satoさん」というメッセージが画面に表示されるようになります。
4. 複数の値を@RequestParamで受け取る方法
@RequestParamでは、同じ名前のパラメータを複数受け取ることもできます。例えば、複数のチェックボックスで選ばれた値をリストで受け取りたいときなどに便利です。
URLの例:http://localhost:8080/items?item=apple&item=banana&item=grape
このように同じキー名(ここではitem)に対して複数の値があると、List<String>で受け取ることができます。
@GetMapping("/items")
public String items(@RequestParam List<String> item, Model model) {
model.addAttribute("items", item);
return "items";
}
このコードでは、複数のitemがリストとしてitemsに格納され、画面に渡されます。
5. @RequestParamのrequired属性とdefaultValue属性の使い方
@RequestParamには、required属性とdefaultValue属性があります。これを使うことで、パラメータが省略された場合の動作を細かく制御できます。
required=true(デフォルト)は、パラメータが必須であることを意味します。パラメータが無いとエラーになります。
一方、required=falseとすれば、パラメータが無くてもエラーになりません。代わりに、引数にはnullが入ります。
さらに、defaultValueを使えば、パラメータが無いときに代わりの値を設定できます。
@GetMapping("/welcome")
public String welcome(@RequestParam(required=false, defaultValue="ゲスト") String name, Model model) {
model.addAttribute("user", name);
return "welcome";
}
この例では、nameパラメータが無い場合は自動的に「ゲスト」という値になります。これにより、URLにパラメータが無くても画面が正しく表示されます。
このように、@RequestParam required defaultValueの組み合わせは、初心者が最初に覚えておくととても便利な設定です。
6. パラメータが無いときの処理(エラー回避と初期値)
初心者がよくつまずくポイントとして、URLにクエリパラメータが無いとエラーになるという問題があります。これは、required=trueがデフォルトであるため、パラメータが無いと400 Bad Requestエラーになるからです。
このような状況を回避するには、先ほど紹介したrequired=falseやdefaultValueを上手に活用することが重要です。
たとえば、以下のようにして初期値を設定すれば、エラーを防ぐことができます。
@GetMapping("/info")
public String info(@RequestParam(defaultValue="未指定") String type, Model model) {
model.addAttribute("typeInfo", type);
return "info";
}
このコードでは、URLに?type=xxxが無い場合、「未指定」という文字列が自動で使われます。こうすることで、Spring URL クエリパラメータ 処理時のエラーを防ぎ、安定した動作になります。
このように、@RequestParamはとても便利ですが、使い方を誤るとエラーの原因にもなります。初心者の方はrequiredとdefaultValueの役割をしっかり覚えておきましょう。
7. @RequestParamとThymeleafを連携させて画面に値を表示する
@RequestParamで受け取った値は、Thymeleafと連携させて画面に表示することができます。これにより、動的なWebページを簡単に作成できるようになります。
以下は、ユーザー名を受け取って画面に表示する例です。
@Controller
public class ViewController {
@GetMapping("/show")
public String showUser(@RequestParam String name, Model model) {
model.addAttribute("username", name);
return "show";
}
}
このコントローラでは、URLの?name=Tanakaの値を受け取り、usernameという名前で画面に渡しています。
続いて、Thymeleaf側のHTMLテンプレートは以下のように記述します。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ユーザー表示</title>
</head>
<body>
<h1>ようこそ!</h1>
<p th:text="'あなたの名前は:' + ${username}"></p>
</body>
</html>
このように、Spring パラメータ 表示を行うには、@RequestParamで値を受け取り、Modelで画面に渡すという流れを覚えておきましょう。
8. よくあるエラーとその原因・対処法
@RequestParamを使うとき、初心者がよく遭遇するのが「パラメータが無い」というエラーです。
たとえば、次のように必須のパラメータを指定した場合、
@GetMapping("/detail")
public String detail(@RequestParam String id, Model model) {
model.addAttribute("id", id);
return "detail";
}
URLに?id=123が無いと、400 Bad Requestエラーになります。
このようなエラーを防ぐには、required=falseやdefaultValueを指定するのが効果的です。
また、URLの書き間違い(パスやキーの間違い)もよくある原因です。例えば、
http://localhost:8080/detail?id=123
とすべきところを、http://localhost:8080/detailsと誤って入力すると、リクエストがマッピングされずに404エラーになります。
このような問題に遭遇したときは、コントローラのURLとパラメータの指定が正しいかを丁寧に見直しましょう。
これらは@RequestParam エラーでよく検索される内容なので、初心者は特に注意しておくと安心です。
9. 初心者がつまずきやすいポイントとアドバイス
Springで@RequestParamを使う際に初心者がつまずきやすいポイントは、以下のようなものです。
- URLの末尾にクエリパラメータが無いときにエラーになる
- パラメータ名のタイプミス(例えば「name」と「username」を混同)
- 画面への値の渡し忘れ(
model.addAttributeの書き忘れ)
これらの問題を防ぐには、以下のアドバイスを守ると良いでしょう。
- 必ず
defaultValueかrequired=falseを使っておく - URLとメソッドのパラメータが対応しているか確認する
- 受け取った値をちゃんと
Modelで画面に渡す
また、Spring パラメータ 処理に関する公式ドキュメントやサンプルコードをたくさん読むことで、理解が深まります。
「初心者向け Spring パラメータ処理」で検索して、実例を確認しながら練習すると、つまずきにくくなるでしょう。