🌐 Spring Framework 講座【第15回】Webの入り口!〜@RestControllerとルーティングの基本〜

docs

前回、Spring Initializrを使ってWebアプリケーションの雛形を作成し、サーバー(Tomcat)を起動するところまで確認しました。

今回からはいよいよSpring Web MVCの機能に入り、Webアプリケーションの中心的な役割を果たす**Controller(コントローラ)**を定義し、ユーザーからのリクエストに応答する最初のAPIを作成します。

1. Spring Web MVCの役割

MVCModel-View-Controller の略で、Webアプリケーションの構造を以下の3つの役割に分ける設計パターンのことです。

  1. Controller(コントローラ): ユーザーからのリクエストを受け付け、どの**業務ロジック(Service)**を実行するかを制御し、結果を返す役割。
  2. Service / Repository (Model): 業務データやロジックを担当する部分(これまでに学んだ@Serviceや@Repository)。
  3. View(ビュー): ユーザーに見せる画面(HTMLなど)を生成する部分。

Spring Web MVCは、このController層を実現し、リクエストを適切なControllerに**ルーティング(振り分け)**する機能を提供します。


2. コントローラを定義する:@RestController

WebアプリケーションのControllerを定義するには、クラスに @Controller アノテーションを付けます。

特に、現在の主流であるRESTful API(データをJSONなどの形式でやり取りするAPI)を作成する場合、以下の @RestController を使用します。

@RestController は、以下の2つのアノテーションを組み合わせたものです。

  1. @Controller: このクラスをSpring MVCのControllerとして登録する(第9回)。
  2. @ResponseBody: このControllerの全メソッドの戻り値を、View(画面)として扱わず、直接**レスポンスの本体(Body)**として扱うよう指示する。

これにより、メソッドが StringObject を返した場合、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/welcomeGETリクエストを送ると、welcome() メソッドが実行されます。


4. HTTPメソッドに特化した便利なアノテーション

@RequestMapping は汎用的なアノテーションですが、HTTPメソッドごとに特化した、より直感的で便利なアノテーションが用意されています。

アノテーション対応HTTPメソッド処理の目的
@GetMappingGETデータの取得(参照)。
@PostMappingPOSTデータの新規作成
@PutMappingPUTデータ全体の更新
@DeleteMappingDELETEデータの削除

上記の @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!";
    }
}

ハンズオン:動作確認

  1. 上記のコードを、前回作成したプロジェクトの com.example.demo パッケージ内に GreetingController.java として作成します。
  2. DemoApplication.java を実行してサーバーを起動します。
  3. 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) – リクエストパラメータの受け取り にご期待ください!

コメント

タイトルとURLをコピーしました