@RequestMappingを使ったルーティング(入門)完全ガイド!初心者でもわかるSpring MVCの基本
新人
「SpringでWebページを作るときに、URLの振り分けってどうやるんですか?」
先輩
「それは@RequestMappingを使ってルーティングを設定するんだ。簡単にURLと処理を結びつけられるんだよ。」
新人
「なるほど!具体的にどう書くんですか?」
先輩
「じゃあ、これから基本的な使い方を説明していくね!」
1. @RequestMappingとは?
@RequestMappingは、Spring MVCでルーティングを設定するためのアノテーションです。これを使うことで、特定のURLにアクセスしたときにどのメソッドを実行するかを指定できます。例えば、ユーザーがブラウザで/helloにアクセスすると、特定の処理を実行させることができます。
開発環境としては、pleiadesを使用し、ビルドツールにはGradleを使います。プロジェクト作成時に、pleiadesの機能で依存関係も簡単に追加できます。
2. ルーティングとは何か?
ルーティングとは、Webアプリケーションで「ユーザーが指定したURLに対して、どの処理を実行するか」を決める仕組みのことです。例えば、Webサイトで「/home」にアクセスするとホーム画面が表示され、「/login」ではログイン画面が表示されるのはルーティングのおかげです。
Spring MVCでは、ルーティングを簡単に設定できるのが特徴です。これにより、開発効率が向上し、URLと処理の対応が直感的に理解できます。
3. なぜ@RequestMappingを使うのか?
@RequestMappingを使用する理由は、以下のようなメリットがあるからです。
- シンプルなURL制御:URLと処理の関連付けが簡単で直感的。
- コードの見やすさ:アノテーションを使うことで、どのメソッドがどのURLに対応するか一目瞭然。
- 柔軟な設定:GETやPOSTなど、HTTPメソッドごとの処理を指定できる。
以下に、簡単なコード例を示します。@Controllerを使用し、@RestControllerは使わないのでご注意ください。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.ui.Model;
@Controller
public class HelloController {
@RequestMapping("/hello")
public String sayHello(Model model) {
model.addAttribute("message", "こんにちは、Spring MVC!");
return "hello"; // hello.htmlを表示
}
}
このコードでは、ユーザーがブラウザで/helloにアクセスすると、sayHelloメソッドが実行され、ビューとしてhello.htmlが表示されます。また、モデルにメッセージを追加して、画面上に「こんにちは、Spring MVC!」と表示させています。
次に、HTMLファイルであるhello.htmlのサンプルを見てみましょう。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Helloページ</title>
</head>
<body>
<h1 th:text="${message}">デフォルトメッセージ</h1>
</body>
</html>
このHTMLでは、th:text="${message}"を使うことで、Java側で追加したメッセージを画面に表示できます。アクセスすると次のような画面が表示されます。
こんにちは、Spring MVC!
これで、基本的な@RequestMappingを使ったルーティングが理解できたと思います。次の記事では、パス変数の利用方法やさらに具体的な使い方を解説します!
4. @RequestMappingの基本的な使い方(GETリクエストを処理する方法)
@RequestMappingを使うと、GETリクエストに対する処理を簡単に実装できます。ユーザーがブラウザでURLにアクセスしたとき、そのURLに対応するメソッドが実行されます。以下に、基本的なGETリクエストの処理方法を示します。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.ui.Model;
@Controller
public class GreetingController {
@RequestMapping("/greet")
public String greet(Model model) {
model.addAttribute("message", "ようこそ、Spring MVCの世界へ!");
return "greet"; // greet.htmlを表示
}
}
上記のコードでは、/greetというURLにアクセスするとgreetメソッドが呼び出され、greet.htmlというビューが表示されます。モデルに追加されたメッセージがビューで表示されます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>挨拶ページ</title>
</head>
<body>
<h1 th:text="${message}">デフォルトメッセージ</h1>
</body>
</html>
ようこそ、Spring MVCの世界へ!
このように、GETリクエストを処理することで、ユーザーが指定したURLにアクセスした際にメッセージを表示することができます。
5. パス変数の使い方(URLにパラメータを渡す方法)
次に、URLに変数を含めてパラメータを渡す方法を紹介します。これにより、URLに動的な値を埋め込み、異なるデータを処理することが可能になります。@PathVariableを使うことで、URL内の一部をメソッドの引数として受け取れます。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.ui.Model;
@Controller
public class UserController {
@RequestMapping("/user/{name}")
public String userProfile(@PathVariable("name") String name, Model model) {
model.addAttribute("username", name);
return "user-profile"; // user-profile.htmlを表示
}
}
このコードでは、ユーザーが/user/太郎にアクセスするとuserProfileメソッドが実行され、URL内の"太郎"がname引数に渡されます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ユーザープロファイル</title>
</head>
<body>
<h1 th:text="'ユーザー名: ' + ${username}">ユーザー名: デフォルト</h1>
</body>
</html>
ユーザー名: 太郎
このようにパス変数を使うことで、URLから直接値を取得し、個別のユーザーページなどを動的に生成できます。
6. 実際に簡単なルーティングを実装してみよう(具体的なコード例)
これまで学んだ内容を踏まえて、複数のルーティングを持つ簡単なWebアプリケーションを実装してみましょう。以下のコードは、挨拶ページとユーザープロファイルページを切り替える例です。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.ui.Model;
@Controller
public class MainController {
@RequestMapping("/")
public String home(Model model) {
model.addAttribute("message", "ホームページへようこそ!");
return "home"; // home.htmlを表示
}
@RequestMapping("/greet")
public String greet(Model model) {
model.addAttribute("message", "こんにちは!今日も頑張りましょう。");
return "greet";
}
@RequestMapping("/user/{name}")
public String userProfile(@PathVariable("name") String name, Model model) {
model.addAttribute("username", name);
return "user-profile";
}
}
各URLにアクセスした際に表示されるHTMLファイルの例を以下に示します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ホーム</title>
</head>
<body>
<h1 th:text="${message}">デフォルトメッセージ</h1>
<nav>
<ul>
<li><a href="/greet">挨拶ページへ</a></li>
<li><a href="/user/花子">花子のプロフィール</a></li>
</ul>
</nav>
</body>
</html>
ホームページへようこそ!
このようにルーティングを組み合わせることで、複数ページへの遷移がスムーズに行えます。各リンクをクリックすることで、それぞれのページが表示されることを確認できます。
7. POSTリクエストの処理方法(フォーム送信の受け取り方)
これまでGETリクエストを中心に解説してきましたが、Webアプリケーション開発においては、ユーザーがフォームからデータを送信する際にPOSTリクエストを使用することが一般的です。Spring MVCでは、@RequestMappingを使用してPOSTリクエストも簡単に処理できます。
以下は、名前を入力して送信するフォームの例です。ユーザーが名前を入力して送信ボタンを押すと、POSTリクエストが送信されます。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class FormController {
@RequestMapping(value = "/form", method = RequestMethod.GET)
public String showForm() {
return "form"; // form.htmlを表示
}
@RequestMapping(value = "/submit", method = RequestMethod.POST)
public String submitForm(@RequestParam("name") String name, Model model) {
model.addAttribute("username", name);
return "result"; // result.htmlを表示
}
}
このコードでは、/formへのGETリクエストでフォーム画面が表示され、/submitへのPOSTリクエストで入力された名前を受け取って結果ページに表示します。
<!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="'こんにちは、' + ${username} + 'さん!'">こんにちは!</h1>
</body>
</html>
こんにちは、山田さん!
このように、@RequestMappingでmethod = RequestMethod.POSTを指定することで、フォームから送信されたデータを簡単に受け取ることができます。
8. @RequestMappingのオプション設定(メソッド、ヘッダー、パラメータの指定方法)
@RequestMappingは単純なルーティング以外にも、さまざまなオプションを指定することができます。ここでは、リクエストメソッドの指定、ヘッダーの条件、リクエストパラメータの指定方法について解説します。
8.1 メソッドの指定
特定のHTTPメソッドにのみ対応させたい場合、method属性を使用します。例えば、以下のようにGETとPOSTに分けた処理が可能です。
@RequestMapping(value = "/data", method = RequestMethod.GET)
public String getData(Model model) {
model.addAttribute("info", "これはGETリクエストです。");
return "data";
}
@RequestMapping(value = "/data", method = RequestMethod.POST)
public String postData(Model model) {
model.addAttribute("info", "これはPOSTリクエストです。");
return "data";
}
8.2 ヘッダーの条件指定
特定のヘッダーが含まれるリクエストのみ処理したい場合は、headers属性を使用します。
@RequestMapping(value = "/header", headers = "key=secret")
public String headerCheck(Model model) {
model.addAttribute("info", "ヘッダー条件を満たしました。");
return "header";
}
8.3 リクエストパラメータの指定
特定のリクエストパラメータがある場合のみ処理したい場合は、params属性を使用します。
@RequestMapping(value = "/param", params = "mode=test")
public String paramCheck(Model model) {
model.addAttribute("info", "パラメータ条件を満たしました。");
return "param";
}
これらのオプションを活用することで、より柔軟なルーティング設定が可能になります。
9. 実践!簡単なWebアプリケーションを作成してみよう(まとめと実践例)
最後に、これまでの内容を活用して、簡単なユーザー登録アプリケーションを作成してみましょう。ユーザーが名前を入力して登録し、その後登録完了画面を表示する流れを実装します。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.ui.Model;
@Controller
public class RegistrationController {
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String showRegistrationForm() {
return "register"; // register.htmlを表示
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String processRegistration(@RequestParam("name") String name, Model model) {
model.addAttribute("username", name);
return "success"; // success.htmlを表示
}
}
register.html(登録フォーム)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ユーザー登録</title>
</head>
<body>
<h1>ユーザー登録フォーム</h1>
<form action="/register" method="post">
<label for="name">名前:</label>
<input type="text" id="name" name="name" required>
<button type="submit">登録</button>
</form>
</body>
</html>
success.html(登録完了画面)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>登録完了</title>
</head>
<body>
<h1 th:text="${username} + 'さん、登録が完了しました!'">登録が完了しました!</h1>
</body>
</html>
山田さん、登録が完了しました!
このアプリケーションでは、ユーザーが名前を入力して送信すると、その名前が次の画面に表示されます。これにより、@RequestMappingを使用したルーティングの基本から応用までを学ぶことができます。