@RequestMappingの基本を完全ガイド!初心者でもわかるルーティングの仕組み
新人
「先輩、Springで@RequestMappingってよく見かけるんですけど、これは何に使うんですか?」
先輩
「@RequestMappingは、Spring MVCでルーティングを設定するためのアノテーションだよ。ユーザーがブラウザでアクセスしたURLを、適切な処理メソッドに振り分ける役割があるんだ。」
新人
「なるほど、URLと処理を結びつけるんですね。具体的にどうやって使うんですか?」
先輩
「それじゃあ、@RequestMappingの基本的な使い方を詳しく説明していこう!」
1. @RequestMappingとは?
@RequestMappingは、Spring FrameworkのMVC機能で使用されるアノテーションで、WebアプリケーションにおいてURLとコントローラ内の処理メソッドを結びつけるために使用されます。これにより、ユーザーがブラウザで特定のURLにアクセスしたときに、対応する処理を実行して適切なHTMLを返すことができます。
例えば、ユーザーが「http://localhost:8080/home」にアクセスすると「ホームページへようこそ!」と表示させたい場合、この@RequestMappingを使います。
このアノテーションは非常に柔軟で、GETやPOSTなどのHTTPメソッドを指定することもでき、同じURLでもリクエストの種類によって処理を変えることができます。
2. @RequestMappingの役割と基本的な使い方
ここでは、実際に@RequestMappingを使用して簡単なルーティングを設定し、Webページを表示する方法を解説します。開発環境はPleiadesを使用し、ビルドツールはGradleを利用します。
2.1 プロジェクトの作成方法(Pleiades使用)
- Pleiadesを起動し、新規Springプロジェクトを作成します。
- プロジェクト名を入力し、ビルドツールはGradleを選択します。
- 依存関係の設定画面で、Spring Webにチェックを入れて追加します。
- 「完了」をクリックし、プロジェクトを生成します。
2.2 コントローラクラスの作成
次に、URLのリクエストを受け取るコントローラクラスを作成します。以下は、ブラウザで/homeにアクセスすると「ホームページへようこそ!」というメッセージを表示する基本的な例です。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping("/home")
public String home() {
return "home";
}
}
このコードのポイントは以下の通りです。
@Controller: クラスがコントローラであることを示します。@RequestMapping("/home"):/homeへのリクエストをこのメソッドで処理します。return "home":home.htmlというテンプレートを返します。
2.3 Viewファイルの作成
ルーティングが正しく設定されたら、画面に表示するHTMLファイルを作成します。以下の手順で作成してください。
src/main/resources/templatesディレクトリを作成します。- その中に
home.htmlというファイルを作成します。
以下がhome.htmlのサンプルコードです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ホームページ</title>
</head>
<body>
<h1>ホームページへようこそ!</h1>
</body>
</html>
2.4 アプリケーションの実行と確認
- Pleiadesで左側のパッケージエクスプローラーから
DemoApplication.javaを右クリックします。 - 実行 > Spring Boot アプリケーションを選択して実行します。
- ブラウザで
http://localhost:8080/homeにアクセスします。
正しく実行されると、以下のように画面に表示されます。
ホームページへようこそ!
2.5 注意点
- HTMLファイルは必ず
templatesフォルダ内に配置してください。 - ファイル名は、コントローラの
returnで指定した名前と一致させる必要があります。 - 実行前に、Pleiadesで依存関係が正しく追加されているか確認してください。
3. @RequestMappingを使った基本的なルーティング方法
@RequestMappingを使用することで、特定のURLへのアクセスに対して特定の処理を実行することができます。基本的なルーティングの考え方は、「URLパス」と「処理メソッド」を関連付けることです。これにより、ユーザーがWebブラウザでURLを入力すると、Springが対応する処理を実行して結果を返します。
例えば、ユーザーが/aboutというURLにアクセスしたときに、「このサイトについて」というページを表示させることができます。
3.1 単純なルーティングの例
以下は、/aboutというURLにアクセスした際に「このサイトについて」というページを表示させる例です。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class AboutController {
@RequestMapping("/about")
public String about() {
return "about";
}
}
次に、about.htmlファイルを作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>このサイトについて</title>
</head>
<body>
<h1>このサイトについて</h1>
<p>このWebアプリケーションはSpring MVCを使って作成されています。</p>
</body>
</html>
アプリケーションを起動し、ブラウザでhttp://localhost:8080/aboutにアクセスすると、以下のように表示されます。
このサイトについて
このWebアプリケーションはSpring MVCを使って作成されています。
4. HTTPメソッドごとの@RequestMappingの使い方(GET、POSTなど)
@RequestMappingはURLだけでなく、HTTPメソッドも指定してルーティングすることができます。これにより、同じURLでもリクエストの種類によって異なる処理を実行させることが可能です。
HTTPメソッドの主な種類は以下の通りです。
- GET:データの取得に使用され、通常ブラウザからのURLアクセス時に使われます。
- POST:データの送信に使用され、フォーム送信などで使用されます。
4.1 GETリクエストの処理
以下は、ブラウザから/helloにアクセスしたときに挨拶メッセージを表示するGETリクエストの例です。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String sayHello() {
return "hello";
}
}
次に、hello.htmlファイルを作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>挨拶ページ</title>
</head>
<body>
<h1>こんにちは、Spring MVC!</h1>
</body>
</html>
実行後、ブラウザでhttp://localhost:8080/helloにアクセスすると、以下のように表示されます。
こんにちは、Spring MVC!
4.2 POSTリクエストの処理
次に、フォームからデータを送信するPOSTリクエストの例を紹介します。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class FormController {
@RequestMapping(value = "/submit", method = RequestMethod.POST)
public String submitForm(@RequestParam("name") String name, Model model) {
model.addAttribute("message", "こんにちは、" + name + "さん!");
return "result";
}
}
次に、名前を入力するフォームを作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>名前入力フォーム</title>
</head>
<body>
<h1>名前を入力してください</h1>
<form action="/submit" method="post">
<label for="name">名前:</label>
<input type="text" id="name" name="name" required>
<button type="submit">送信</button>
</form>
</body>
</html>
フォーム送信後に表示する結果ページを作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>挨拶結果</title>
</head>
<body>
<h1 th:text="${message}">ここにメッセージが表示されます</h1>
</body>
</html>
ブラウザでhttp://localhost:8080/submitにアクセスしてフォームに名前を入力し、送信すると以下のように表示されます。
こんにちは、太郎さん!
5. 実際のコード例とその解説
ここでは、GETとPOSTを組み合わせた実践的なコード例を紹介します。ユーザーが名前を入力して挨拶を表示する簡単なアプリケーションを作成します。
5.1 コントローラクラスの作成
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class GreetingController {
@RequestMapping(value = "/greeting", method = RequestMethod.GET)
public String showForm() {
return "greetingForm";
}
@RequestMapping(value = "/greeting", method = RequestMethod.POST)
public String processForm(@RequestParam("name") String name, Model model) {
model.addAttribute("greetingMessage", "ようこそ、" + name + "さん!");
return "greetingResult";
}
}
5.2 入力フォームの作成
greetingForm.htmlに以下の内容を記述します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>挨拶フォーム</title>
</head>
<body>
<h1>名前を入力してください</h1>
<form action="/greeting" method="post">
<label for="name">名前:</label>
<input type="text" id="name" name="name" required>
<button type="submit">送信</button>
</form>
</body>
</html>
5.3 結果表示ページの作成
greetingResult.htmlを作成し、以下の内容を記述します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>挨拶結果</title>
</head>
<body>
<h1 th:text="${greetingMessage}">挨拶が表示されます</h1>
</body>
</html>
5.4 実行と確認
- Pleiadesでアプリケーションを実行します。
- ブラウザで
http://localhost:8080/greetingにアクセスし、名前を入力します。 - 送信をクリックすると、挨拶メッセージが表示されます。
実行結果は以下のように表示されます。
ようこそ、花子さん!
6. 実践!簡単なWebアプリケーションの作成手順
ここでは、@RequestMappingを使用して「お問い合わせフォーム」を実装するWebアプリケーションを作成します。ユーザーがフォームに入力し、送信すると、確認ページにデータが表示されるシンプルな仕組みです。
6.1 プロジェクトの作成(Pleiades使用)
- Pleiadesを起動し、新規Springプロジェクトを作成します。
- プロジェクト名をcontact-formと入力し、ビルドツールはGradleを選択します。
- 依存関係の設定画面でSpring Webにチェックを入れて追加します。
- 完了ボタンをクリックしてプロジェクトを生成します。
6.2 コントローラクラスの作成
ContactControllerを作成し、GETリクエストでフォーム表示、POSTリクエストでデータ処理を行います。
package com.example.contactform.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class ContactController {
@RequestMapping(value = "/contact", method = RequestMethod.GET)
public String showForm() {
return "contactForm";
}
@RequestMapping(value = "/contact", method = RequestMethod.POST)
public String submitForm(
@RequestParam("name") String name,
@RequestParam("email") String email,
@RequestParam("message") String message,
Model model) {
model.addAttribute("name", name);
model.addAttribute("email", email);
model.addAttribute("message", message);
return "contactResult";
}
}
6.3 Viewファイルの作成
6.3.1 入力フォーム(contactForm.html)
以下のHTMLファイルをsrc/main/resources/templatesに作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせフォーム</title>
</head>
<body>
<h1>お問い合わせ</h1>
<form action="/contact" method="post">
<label for="name">名前:</label><br>
<input type="text" id="name" name="name" required><br><br>
<label for="email">メールアドレス:</label><br>
<input type="email" id="email" name="email" required><br><br>
<label for="message">メッセージ:</label><br>
<textarea id="message" name="message" rows="5" required></textarea><br><br>
<button type="submit">送信</button>
</form>
</body>
</html>
6.3.2 結果表示ページ(contactResult.html)
送信後に表示される確認ページを作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>送信完了</title>
</head>
<body>
<h1>お問い合わせ内容確認</h1>
<p>名前: <span th:text="${name}"></span></p>
<p>メールアドレス: <span th:text="${email}"></span></p>
<p>メッセージ: <span th:text="${message}"></span></p>
<p>お問い合わせありがとうございました!</p>
</body>
</html>
6.4 アプリケーションの実行と確認
- Pleiadesで
ContactFormApplication.javaを右クリックし、実行 > Spring Boot アプリケーションを選択。 - ブラウザで
http://localhost:8080/contactにアクセス。 - 名前、メール、メッセージを入力して送信。
送信後、以下の画面が表示されます。
お問い合わせ内容確認
名前: 山田太郎
メールアドレス: yamada@example.com
メッセージ: お問い合わせ内容を確認しました。
お問い合わせありがとうございました!
7. よくあるエラーとその解決方法
初心者がSpring MVCで@RequestMappingを使う際に遭遇しやすいエラーと解決策を紹介します。
7.1 404エラー(ページが見つからない)
原因: URLの指定ミスや、コントローラ内の@RequestMappingパスが間違っている場合に発生します。
解決方法:
- URLパスとメソッド内の
@RequestMappingが一致しているか確認。 - Viewファイルが
templatesディレクトリに正しく配置されているか確認。 - ファイル名のスペルミスをチェック。
7.2 405エラー(HTTPメソッドが許可されていない)
原因: GETメソッドでPOST専用のURLにアクセスした場合などに発生します。
解決方法:
@RequestMappingのmethod属性が正しく設定されているか確認。- フォームの
method="post"が正しいかチェック。
7.3 500エラー(内部サーバーエラー)
原因: コントローラ内でのNullPointerExceptionや、Modelに渡すデータが不足している場合に発生します。
解決方法:
- コントローラで必要な値が正しく渡されているか確認。
- Viewで参照している変数が
model.addAttribute()で追加されているか確認。
8. 次のステップと今後の学習ポイント
@RequestMappingを学んだ次のステップとして、以下のトピックに進むことでより深い理解が得られます。
@GetMapping・@PostMappingの使用:@RequestMappingの簡略版として、より読みやすいコードが書けます。- バリデーション: フォーム入力値のチェック方法を学びましょう。
- セッション管理: ログイン情報の保持やユーザー情報の保存方法を学べます。
- エラーハンドリング:
@ExceptionHandlerを使った例外処理も重要です。
次の記事では、@GetMappingと@PostMappingを活用したルーティングの簡略化方法を解説します。実際のWeb開発では、これらのアノテーションを活用して、さらに読みやすく保守性の高いコードを書けるようにしましょう。
まとめ
本記事では、Spring MVCでルーティングを制御するための基本アノテーションである@RequestMappingについて、基礎から実践まで幅広く解説しました。@RequestMappingは、URLと処理メソッドを結び付ける重要な役割を持ち、GET・POSTといったHTTPメソッドを使い分けることで、より柔軟なWebアプリケーションの構築が可能となります。実際に、@RequestMapping("/home")のようにパスを指定することで、HTML画面との連携や処理の実行が行えるため、初心者でも視覚的に理解しやすい仕組みです。
また、実際のアプリケーション作成を通して、ルーティングだけでなくModelオブジェクトを使ったデータの受け渡し、HTMLフォームの作成、POSTリクエストでの値送信、そして結果画面での表示まで、Web開発の一連の流れを体験することができました。特に、入力フォームからのPOST送信処理では、@RequestParamで値を受け取り、model.addAttribute()でViewにデータを渡す方法は、Spring開発における基礎知識として重要です。
さらに、@RequestMappingに指定するHTTPメソッドの違いによって、405エラーなどのトラブルが発生することも学びました。method = RequestMethod.GETやPOSTの指定を正確に理解することで、不要なエラーを回避し、開発の効率を高めることができます。
最後に、お問い合わせフォームを題材にした実践例では、GETとPOSTの両方の使い分け方や、入力→送信→確認画面という流れを通して、@RequestMappingの応用方法も習得できたはずです。このように、ルーティングの基礎を理解することで、今後のWebアプリケーション開発における重要な土台が築かれます。
以下に、POST送信で使用したサンプルコードを再掲します。振り返りに活用してください。
@RequestMapping(value = "/contact", method = RequestMethod.POST)
public String submitForm(
@RequestParam("name") String name,
@RequestParam("email") String email,
@RequestParam("message") String message,
Model model) {
model.addAttribute("name", name);
model.addAttribute("email", email);
model.addAttribute("message", message);
return "contactResult";
}
新人
「今日の記事で、@RequestMappingがルーティングの要だってわかりました!GETとPOSTを使い分ける方法も理解できました。」
先輩
「その通り!特に、method属性の指定があることで、URLは同じでも処理を切り分けられるのがポイントだったね。POST処理では@RequestParamで値を受け取るのも覚えておこう。」
新人
「はい!あと、404や405のエラーが出る原因とその解決方法もすごく参考になりました。今まで意味がわからず困っていたんです。」
先輩
「よかった。それも理解しておけば、エラーが出たときに焦らず対処できるよ。次は@GetMappingや@PostMappingについても勉強してみよう!」
新人
「はい、頑張ります!まずは@RequestMappingで基本をしっかり固めて、実際のアプリ開発にも挑戦していきます!」