前回、Spring Initializrを使ってWebアプリケーションの雛形を作成し、サーバー(Tomcat)を起動するところまで確認しました。
今回からはいよいよSpring Web MVCの機能に入り、Webアプリケーションの中心的な役割を果たす**Controller(コントローラ)**を定義し、ユーザーからのリクエストに応答する最初のAPIを作成します。
1. Spring Web MVCの役割
MVCは Model-View-Controller の略で、Webアプリケーションの構造を以下の3つの役割に分ける設計パターンのことです。
- Controller(コントローラ): ユーザーからのリクエストを受け付け、どの**業務ロジック(Service)**を実行するかを制御し、結果を返す役割。
- Service / Repository (Model): 業務データやロジックを担当する部分(これまでに学んだ@Serviceや@Repository)。
- View(ビュー): ユーザーに見せる画面(HTMLなど)を生成する部分。
Spring Web MVCは、このController層を実現し、リクエストを適切なControllerに**ルーティング(振り分け)**する機能を提供します。
2. コントローラを定義する:@RestController
WebアプリケーションのControllerを定義するには、クラスに @Controller アノテーションを付けます。
特に、現在の主流であるRESTful API(データをJSONなどの形式でやり取りするAPI)を作成する場合、以下の @RestController を使用します。
@RestController は、以下の2つのアノテーションを組み合わせたものです。
- @Controller: このクラスをSpring MVCのControllerとして登録する(第9回)。
- @ResponseBody: このControllerの全メソッドの戻り値を、View(画面)として扱わず、直接**レスポンスの本体(Body)**として扱うよう指示する。
これにより、メソッドが String や Object を返した場合、Springが自動でそれを JSON やプレーンテキストに変換してクライアントに返します。
3. ルーティングの定義:@RequestMapping
Controllerのメソッドと、特定のURL(エンドポイント)を結びつけることをルーティングと呼びます。これには @RequestMapping アノテーションを使います。
3-1. @RequestMapping の使い方
@RequestMapping は、クラス全体、またはメソッドに対して使用できます。
| 適用箇所 | 意味 |
| クラス | このControllerが処理するベースとなるURLを指定する。 |
| メソッド | ベースURLに続く具体的なパスと、**HTTPメソッド(GET/POSTなど)**を指定する。 |
Java
// ベースURLを "/api/hello" に設定
@RestController
@RequestMapping("/api/hello")
public class GreetingController {
// ① HTTP GETリクエスト、かつ パスが "/welcome" のリクエストをこのメソッドで処理する
@RequestMapping(value = "/welcome", method = RequestMethod.GET)
public String welcome() {
// 戻り値の文字列 "Hello Spring!" がレスポンスボディとして返される
return "Hello Spring!";
}
}
このコードにより、ユーザーが http://localhost:8080/api/hello/welcome に GETリクエストを送ると、welcome() メソッドが実行されます。
4. HTTPメソッドに特化した便利なアノテーション
@RequestMapping は汎用的なアノテーションですが、HTTPメソッドごとに特化した、より直感的で便利なアノテーションが用意されています。
| アノテーション | 対応HTTPメソッド | 処理の目的 |
| @GetMapping | GET | データの取得(参照)。 |
| @PostMapping | POST | データの新規作成。 |
| @PutMapping | PUT | データ全体の更新。 |
| @DeleteMapping | DELETE | データの削除。 |
上記の @GetMapping を使うと、先ほどのコードは次のように簡潔になります。
【ベストプラクティスな記述例】
Java
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// クラス全体にベースパスを設定
@RestController
@RequestMapping("/api/greeting")
public class GreetingController {
// GETリクエスト(http://localhost:8080/api/greeting/hello)を処理
@GetMapping("/hello")
public String sayHello() {
// Spring Bootが自動でWebサーバーを起動しているため、localhost:8080でアクセス可能
return "Hello Spring, from Controller!";
}
}
ハンズオン:動作確認
- 上記のコードを、前回作成したプロジェクトの com.example.demo パッケージ内に GreetingController.java として作成します。
- DemoApplication.java を実行してサーバーを起動します。
- Webブラウザまたは curl コマンドで、以下のURLにアクセスします。http://localhost:8080/api/greeting/hello
画面に Hello Spring, from Controller! と表示されれば成功です。
✅ 本日のまとめ
- Spring Web MVC は、WebアプリケーションのController層を実現する機能。
- @RestController を使うと、戻り値が直接レスポンスボディになるRESTful APIのControllerを定義できる。
- @RequestMapping または @GetMapping / @PostMapping などのアノテーションで、URLとControllerのメソッドを関連付ける(ルーティング)。
🔔 次回予告
最初のAPIは作成できましたが、Webアプリケーションではユーザーから送られてくるデータ(リクエストパラメータ)を受け取って処理するのが一般的です。
次回は、URLのパスに含まれるデータや、クエリパラメータ、そしてフォームで送られてくるデータなど、様々なリクエストデータをControllerのメソッドで受け取る方法を詳しく学びます。
次回:【第16回】Spring Web MVC (2) – リクエストパラメータの受け取り にご期待ください!


コメント