初心者向け!@RequestParamの使い方を徹底解説|Spring MVCでのクエリパラメータ処理方法
新人
「先輩、Spring MVCでURLのパラメータを受け取る方法ってありますか?」
先輩
「それなら@RequestParamを使うと簡単に受け取れるよ。クエリパラメータを処理するときによく使うんだ。」
新人
「具体的にどのように使うんですか?コード例も見てみたいです!」
先輩
「それじゃあ、基本的な使い方と利便性について説明するね!」
1. @RequestParamとは?(基本的な説明)
@RequestParamは、Spring MVCでHTTPリクエストのクエリパラメータを取得するために使われるアノテーションです。クエリパラメータとは、URLの「?」以降に付加されるデータで、フォーム送信やリンククリック時に情報をサーバーに渡すのに使います。
例えば、以下のURLの場合、nameとageがクエリパラメータです。
http://localhost:8080/user?name=Tanaka&age=25
@RequestParamを使うと、クエリパラメータを簡単に取得できます。以下に基本的なコード例を示します。
@Controller
public class UserController {
@GetMapping("/user")
public String getUser(@RequestParam String name, @RequestParam int age, Model model) {
model.addAttribute("name", name);
model.addAttribute("age", age);
return "user";
}
}
上記のコードでは、http://localhost:8080/user?name=Tanaka&age=25にアクセスすると、クエリパラメータがメソッドの引数に自動でマッピングされます。
2. @RequestParamがなぜ使われるのか(役割と利便性)
@RequestParamが使われる理由は、以下のような利便性があるからです。
- 簡単なパラメータ取得: URLやフォーム送信時のデータ取得が簡単です。
- コードの可読性向上: メソッドの引数に直接マッピングでき、コードが分かりやすくなります。
- オプションパラメータへの対応: 必須でないパラメータにも対応可能です。
オプションパラメータの例を以下に示します。
@GetMapping("/user")
public String getUser(@RequestParam(required = false) String name, @RequestParam(defaultValue = "0") int age, Model model) {
model.addAttribute("name", name != null ? name : "未指定");
model.addAttribute("age", age);
return "user";
}
このコードでは、nameパラメータが省略された場合、「未指定」と表示されます。また、ageは指定されていないときにデフォルトで「0」が適用されます。
3. @RequestParamの基本的な使い方(簡単なコード例付き)
@RequestParamは、クエリパラメータやフォームデータを簡単に取得するためのSpring MVCのアノテーションです。特にGETリクエストやPOSTリクエストで、クライアントから送られてくるデータをメソッドの引数として受け取ることができます。ここでは、基本的な使い方を具体的なコード例とともに解説します。
① コントローラクラスの作成
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class GreetingController {
@GetMapping("/greet")
public String greetUser(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
このコードでは、ブラウザで/greet?name=太郎のようにアクセスすると、クエリパラメータnameを取得し、HTML画面に渡しています。
② HTMLファイル(greeting.html)の作成
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>挨拶ページ</title>
</head>
<body>
<h1>挨拶</h1>
<p th:text="'こんにちは、' + ${name} + 'さん!'">こんにちは、ゲストさん!</p>
</body>
</html>
③ 実行結果のイメージ
こんにちは、太郎さん!
ブラウザでlocalhost:8080/greet?name=太郎にアクセスすると、入力した名前が画面に表示されます。これが@RequestParamを使った基本的なデータ取得方法です。
4. クエリパラメータの取得方法
クエリパラメータは、URLの末尾に?key=valueの形式でデータを渡す方法です。@RequestParamを使うことで、簡単に取得できます。
① 複数のクエリパラメータを取得する例
@GetMapping("/search")
public String search(@RequestParam("query") String query, @RequestParam("page") int page, Model model) {
model.addAttribute("query", query);
model.addAttribute("page", page);
return "searchResults";
}
上記のメソッドでは、/search?query=Spring&page=2のようなURLからqueryとpageの値を取得できます。
② HTMLファイル(searchResults.html)の作成
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>検索結果</title>
</head>
<body>
<h1>検索結果</h1>
<p th:text="'検索ワード: ' + ${query}">検索ワード: 未入力</p>
<p th:text="'ページ番号: ' + ${page}">ページ番号: 未指定</p>
</body>
</html>
③ 実行結果のイメージ
検索ワード: Spring
ページ番号: 2
URLに複数のクエリパラメータを指定することで、検索やページネーションの処理が簡単に実装できます。
5. デフォルト値や必須設定の使い方
@RequestParamには、デフォルト値を指定したり、パラメータを必須にするかどうかを設定する機能があります。これにより、入力ミスやパラメータ不足のエラーを防ぐことができます。
① デフォルト値を設定する方法
@GetMapping("/welcome")
public String welcome(@RequestParam(value = "name", defaultValue = "ゲスト") String name, Model model) {
model.addAttribute("name", name);
return "welcome";
}
デフォルト値を設定すると、URLにクエリパラメータが指定されていない場合でも、指定した初期値が使われます。
② HTMLファイル(welcome.html)の作成
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ようこそ</title>
</head>
<body>
<h1>ようこそ!</h1>
<p th:text="'お名前: ' + ${name}">お名前: 未入力</p>
</body>
</html>
③ 実行結果のイメージ
お名前: ゲスト
/welcomeにアクセスすると、クエリパラメータが無い場合でも「お名前: ゲスト」と表示されます。
④ 必須パラメータの設定
@GetMapping("/details")
public String details(@RequestParam(value = "id", required = true) int id, Model model) {
model.addAttribute("id", id);
return "details";
}
required = trueが指定されている場合、パラメータが欠如するとエラーが発生します。デフォルトではrequiredはtrueです。
⑤ HTMLファイル(details.html)の作成
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>詳細情報</title>
</head>
<body>
<h1>詳細情報</h1>
<p th:text="'ID: ' + ${id}">ID: 未指定</p>
</body>
</html>
⑥ 実行結果のイメージ
ID: 1001
クエリパラメータを正しく指定することで、エラーを回避しながら安全なデータ取得が可能です。デフォルト値の活用や必須設定を適切に使うことで、アプリケーションの信頼性が向上します。
6. 複数のパラメータの取得方法とその活用例
実際の開発では、複数のクエリパラメータを同時に取得することがよくあります。以下の例では、name、age、emailの3つのパラメータを受け取ります。
@GetMapping("/profile")
public String getProfile(@RequestParam String name,
@RequestParam int age,
@RequestParam(required = false, defaultValue = "未登録") String email,
Model model) {
model.addAttribute("name", name);
model.addAttribute("age", age);
model.addAttribute("email", email);
return "profile";
}
上記コードを実行後、以下のURLにアクセスしてみてください。
http://localhost:8080/profile?name=Suzuki&age=30&email=suzuki@example.com
結果は次のように表示されます。
名前: Suzuki
年齢: 30
メールアドレス: suzuki@example.com
メールアドレスが指定されていない場合は「未登録」と表示されます。
7. よくあるエラーとその解決方法
@RequestParamを使用する際、初心者がよく直面するエラーとその対処方法を紹介します。
① パラメータの型不一致エラー
例えば、以下のコードでageに数値以外の値を渡すとエラーが発生します。
@GetMapping("/user")
public String getUser(@RequestParam int age, Model model) {
model.addAttribute("age", age);
return "user";
}
以下のURLでageに文字列を指定すると、"400 Bad Request"が返されます。
http://localhost:8080/user?age=abc
解決方法: パラメータが整数であることを事前に確認し、正しい値を指定してください。
② 必須パラメータが不足しているエラー
パラメータを省略した場合、required=trueがデフォルトのためエラーになります。
http://localhost:8080/user
解決方法: オプションパラメータにするか、デフォルト値を指定します。
@GetMapping("/user")
public String getUser(@RequestParam(required = false, defaultValue = "0") int age, Model model) {
model.addAttribute("age", age);
return "user";
}
③ URLの記述ミス
クエリパラメータの区切りを間違えると値が取得できません。
正しい: /user?name=Tanaka&age=25
間違い: /user?name=Tanakaage=25
解決方法: パラメータ間は&で区切ることを忘れないでください。
8. @RequestParamを学ぶ際のポイントと今後の学習ステップ
@RequestParamを使いこなすためには、以下のポイントに注意しながら実際にコードを書いて学習を進めることが重要です。
- クエリパラメータの基本的な書き方と取得方法に慣れる。
- 必須・オプションパラメータの違いと活用方法を理解する。
- エラーが出たときは、パラメータの型やURLの書き方を確認する。
- 実際に複数のパラメータを使ったアプリケーションを作成してみる。
今後は以下のトピックも学習することで、さらにSpring MVCでの開発スキルが向上します。
- @PathVariable: パスパラメータの取得方法。
- フォームバリデーション: ユーザー入力の検証方法。
- エラーハンドリング: @ExceptionHandlerを使用したエラー処理の実装。
これらを習得することで、より実践的で信頼性の高いWebアプリケーションが作れるようになります。