カテゴリ: Spring 更新日: 2025/11/26

Spring Bootのコントローラ設定ガイド!初心者でもわかる基本的な @controller アノテーションの使い方

SpringBootのコントローラ
SpringBootのコントローラ

先生と生徒の会話形式で理解しよう

生徒

「Spring Bootでコントローラを作りたいんですが、どこに配置するんですか?」

先生

「コントローラは通常、controllerというフォルダを作り、その中に配置します。また、@GetMappingを使うと簡単にルーティングできますよ。」

生徒

「画面遷移もできるんですか?」

先生

「はい、パラメータを使わない遷移も簡単に設定できます。それでは、具体的に解説していきましょう。」

1. コントローラとは?

1. コントローラとは?
1. コントローラとは?

JavaのSpring Bootフレームワークにおいて、コントローラはユーザーのリクエストを処理し、対応するレスポンスを返す役割を持っています。ウェブアプリケーションでは、ブラウザからのアクセスを受け取り、リクエストに対応するメソッドを実行して適切なHTMLやJSONのデータを返す仕組みです。

2. コントローラの配置場所

2. コントローラの配置場所
2. コントローラの配置場所

Spring Bootプロジェクトでコントローラを作成する際は、通常controllerパッケージを新規作成し、その中にファイルを配置します。例えば、以下のようなフォルダ構成にすることで、後のメンテナンスがしやすくなります。


    └─ src
        └─ main
            └─ java
                └─ com
                    └─ example
                        └─ demo
                            └─ controller
                                └─ SampleController.java

このようにしておくと、他のファイルと混ざらずに整理ができます。また、パッケージ名はcontrollerとすると管理が簡単になります。

3. @GetMappingアノテーション

3. @GetMappingアノテーション
3. @GetMappingアノテーション

@GetMappingは、特定のURLパスへのGETリクエストに対してメソッドを紐付けるアノテーションです。ブラウザからのアクセスに対し、HTMLファイルや文字列などを返す際に利用します。以下のコード例を見てみましょう。


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class SampleController {

    @GetMapping("/home")
    public String showHomePage() {
        return "home";
    }
}

この例では、ブラウザがhttp://localhost:8080/homeにアクセスするとhomeという名前のHTMLが表示されます。showHomePageメソッドが"/home"にアクセスした際に実行されるため、わかりやすい画面遷移が可能です。

4. パラメータなしの画面遷移

4. パラメータなしの画面遷移
4. パラメータなしの画面遷移

Spring Bootでは、画面遷移のためにURLのパラメータを使用せずに遷移を設定できます。これは、固定URLのエンドポイントを設定するだけで実現可能です。

例えば、先ほどのコードでは、@GetMapping("/home")を指定しているので、/homeにアクセスするとhome.htmlが表示されます。以下のようなURLの設定もできます。


@GetMapping("/about")
public String showAboutPage() {
    return "about";
}

このように設定すると、/aboutにアクセスした際にabout.htmlが表示されます。URLごとに異なるHTMLを返すことで、複数のページ遷移が可能です。

5. HTMLファイルの配置場所

5. HTMLファイルの配置場所
5. HTMLファイルの配置場所

Spring BootでHTMLファイルは、通常、以下のフォルダに配置します。


    └─ src
        └─ main
            └─ resources
                └─ templates
                    └─ home.html
                    └─ about.html

ここに配置することで、自動的にテンプレートエンジンThymeleafによってHTMLが読み込まれるようになります。showHomePageメソッドでreturn "home";とした場合、templates/home.htmlが読み込まれる仕組みです。

6. コントローラの動作確認

6. コントローラの動作確認
6. コントローラの動作確認

コントローラが正常に動作するかを確認するには、アプリケーションを起動し、http://localhost:8080/homeなどのURLにアクセスします。正しく配置されている場合、指定したhome.htmlの内容が表示されます。

7. @Controller と @RestController の違い

7. @Controller と @RestController の違い
7. @Controller と @RestController の違い

@Controllerはテンプレート(例:Thymeleaf)にレンダリングさせるためのビュー名を返すのが基本です。一方、@RestController@Controller + @ResponseBodyの組み合わせで、メソッドの戻り値をそのままHTTPレスポンス本文にします。画面(HTML)を返す通常のWebアプリでは@Controllerを使い、APIのようにJSONや文字列を返したい場合は@ResponseBodyを付ける、という使い分けを覚えましょう。


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    // 画面(テンプレート)を返す:ビュー名を返却
    @GetMapping("/hello")
    public String helloView() {
        return "hello"; // templates/hello.html を描画
    }

    // 本文を直接返す:@ResponseBody を付与
    @GetMapping("/api/ping")
    @ResponseBody
    public String ping() {
        return "pong";
    }
}

8. Modelで値をテンプレートへ渡す(ビュー名の返し方の基本)

8. Modelで値をテンプレートへ渡す(ビュー名の返し方の基本)
8. Modelで値をテンプレートへ渡す(ビュー名の返し方の基本)

@Controllerでは、Modelに属性を詰めてビュー(テンプレート)へ渡します。メソッドはテンプレート名(拡張子なし)を返すだけでOKです。テンプレート側では、Thymeleafの式で受け取った値を表示します。


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class GreetController {

    @GetMapping("/greet")
    public String greet(Model model) {
        model.addAttribute("userName", "太郎");
        model.addAttribute("today", "2025-08-25");
        return "greet"; // templates/greet.html
    }
}

<!-- templates/greet.html(抜粋) -->
<h1 th:text="'ようこそ、' + ${userName} + 'さん!'"></h1>
<p th:text="'本日の日付:' + ${today}"></p>

戻り値で指定した名前に対応するHTMLが src/main/resources/templates から自動解決されます。これが「ビュー名を返す」という@Controllerの基本パターンです。

9. @PostMappingでフォーム送信を受け取り、リダイレクトする

9. @PostMappingでフォーム送信を受け取り、リダイレクトする
9. @PostMappingでフォーム送信を受け取り、リダイレクトする

フォーム送信は@PostMappingで受け取り、処理完了後はPRGパターン(Post/Redirect/Get)でリロードによる重複送信を防ぐのが定番です。リダイレクトは戻り値にredirect:を付けるだけで指定できます。


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
public class ContactController {

    @PostMapping("/contact")
    public String submitContact(
            @RequestParam String name,
            @RequestParam String message,
            RedirectAttributes ra) {

        // ここで保存やメール送信などの処理を行う
        ra.addFlashAttribute("notice", "お問い合わせを受け付けました。ありがとうございます。");

        // 完了画面へリダイレクト(/contact/complete に GET)
        return "redirect:/contact/complete";
    }

    @GetMapping("/contact/complete")
    public String complete() {
        return "contact-complete"; // templates/contact-complete.html
    }
}

フラッシュスコープ(RedirectAttributes)を使うと、リダイレクト後の画面でメッセージを1回だけ表示できます。これも@Controllerでの画面遷移の基本テクニックです。

まとめ

まとめ
まとめ

この記事では、Spring Bootにおけるコントローラの基本的な設定と使用方法について詳しく解説しました。コントローラは、ユーザーからのリクエストを処理し、対応するレスポンスを返す重要な役割を果たします。@GetMappingアノテーションを利用することで、URLとメソッドを簡単に紐付けられるため、複数の画面遷移や機能を実現できます。

また、コントローラの配置場所やHTMLファイルの保存先についても説明しました。「controller」パッケージsrc/main/resources/templatesディレクトリを活用することで、プロジェクトの管理が容易になり、他の開発者との共同作業もスムーズに行えます。

以下に、基本的なコントローラのサンプルコードを再掲します。このコードでは、homeページとaboutページへの画面遷移を実装しています。


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class PageController {

    @GetMapping("/home")
    public String showHomePage() {
        return "home";
    }

    @GetMapping("/about")
    public String showAboutPage() {
        return "about";
    }
}

このコードに対応するHTMLファイルをsrc/main/resources/templatesに保存することで、ブラウザからのアクセスに応じて適切なページが表示されます。例えば、http://localhost:8080/homeにアクセスするとhome.htmlが読み込まれます。

Spring Bootでは、簡単な設定でコントローラの動作確認ができるため、初学者でも手軽にウェブアプリケーションを構築できます。特に、URLごとに異なる画面を返す機能は、複雑なアプリケーションを作成する上での基盤となります。

先生と生徒の振り返り会話

生徒

「Spring Bootのコントローラを使えば、URLごとに異なるページを簡単に表示できるんですね!」

先生

「そうです。@GetMappingを使えば、URLとメソッドを紐付ける作業がとても簡単になります。」

生徒

「フォルダ構成を整理することで、他の開発者とも共有しやすくなりそうですね。」

先生

「その通りです。プロジェクトが大きくなると、整理されたフォルダ構成がとても役に立ちます。」

生徒

「次はパラメータを使った動的な画面遷移も試してみたいと思います!」

先生

「それは良いですね。動的な画面遷移を実装することで、ユーザーの入力に応じた柔軟なアプリケーションを作成できますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Spring Bootでコントローラを作成する場合、どのフォルダに配置すればよいですか?

Spring Bootでは、通常「controller」という名前のパッケージを作成し、その中にコントローラのクラスを配置します。例えば、com.example.demo.controllerのようなパッケージ構成が一般的です。

@GetMappingアノテーションは何のために使いますか?

@GetMappingは、特定のURLへのGETリクエストを処理するメソッドを指定するためのアノテーションです。例えば、@GetMapping("/home")とすると、/homeにアクセスがあった際に対応するメソッドが実行されます。

HTMLファイルはどこに配置すればいいですか?

HTMLファイルは、src/main/resources/templatesディレクトリに配置します。このディレクトリに置かれたファイルは、Thymeleafテンプレートエンジンで自動的に読み込まれます。

Spring Bootのコントローラで画面遷移を設定する方法は?

画面遷移は、コントローラ内でURLとHTMLファイルを関連付けることで設定します。例えば、@GetMapping("/home")のメソッドでreturn "home";とすると、templates/home.htmlが表示されます。

Spring Bootで複数の画面を作るにはどうすれば良いですか?

複数の画面を作るには、それぞれ異なるURLを@GetMappingで設定し、対応するHTMLファイルをtemplatesディレクトリに保存します。例えば、/home用のhome.html/about用のabout.htmlを作成します。

コントローラの動作確認はどのように行いますか?

Spring Bootアプリケーションを起動し、ブラウザで設定したURLにアクセスします。例えば、http://localhost:8080/homeにアクセスして、期待した画面が表示されるか確認します。

Spring Bootで使用するHTMLファイルに動的な要素を加えるにはどうすれば良いですか?

動的な要素を加えるには、Thymeleafを使ってHTMLファイル内に変数や条件文を記述します。コントローラでデータをモデルに追加し、それをHTMLファイルで参照する形で動的な内容を作成します。

Spring Bootのコントローラとサービスの違いは何ですか?

コントローラは、ユーザーからのリクエストを受け取り、レスポンスを返す役割を持ちます。一方で、サービスはビジネスロジックを実行する役割を持ち、コントローラから呼び出されてデータ処理を行います。

固定URL以外にパラメータ付きの画面遷移は可能ですか?

はい、可能です。Spring Bootでは、@RequestParam@PathVariableを使用してパラメータを受け取り、それを使った画面遷移を実現できます。

Thymeleafを使用する場合、コントローラでどのようにデータを渡しますか?

Thymeleafを使用する際、コントローラのメソッドでModelオブジェクトを利用してデータを渡します。例えば、model.addAttribute("key", value);を使うことで、HTMLファイル内で変数として参照できます。

テンプレートを表示したいのに @RestController を付けたら文字列がそのまま出ます。どう直せばいい?

テンプレートを描画したい場合は @Controller を使い、メソッドからビュー名(例:"home")を返してください。@RestController は戻り値を本文に書き出すため、ビューは解決されません。

@Controller のまま JSON を返す方法はありますか?

あります。メソッドに @ResponseBody を付けるか、戻り値を ResponseEntity<T> にして返してください。クラスに @ResponseBody を付ける方法もあります。

理解度のクイズ問題

理解度のクイズ
この記事の理解度をクイズで確認しよう

空欄の★に当てはまる内容を答えてください。

問題1
画面(HTMLテンプレート)を返す通常のWebアプリでは、メソッドの戻り値にビュー名を返します。 このとき使用するクラス単位のアノテーションは @Controller です。 一方、メソッドの戻り値をそのままHTTPレスポンス本文にしたい場合は、メソッドに @ResponseBody を付けて明示します。 これにより、ルーティング/画面遷移/テンプレート連携(Spring Boot・SEO:コントローラ、アノテーション、JSON API)の基本が整理できます。
@Controller
class SampleController {

    @GetMapping("/hello")
    public String helloView() {
        return "hello";
    }

    @GetMapping("/api/ping")
    @ResponseBody
    public String ping() {
        return "pong";
    }
}
【ヒント】 ・ビュー名を返す=テンプレートを描画/本文を返す=JSONや文字列。 ・@RestController@Controller@ResponseBodyの合成。 ・関連キーワード:Spring Boot コントローラ、テンプレートエンジン、APIレスポンス、SEO(入門/基本)。

下記をクリックすると、解答が表示されます
カテゴリの一覧へ
新着記事
JavaのHttpServletResponseWrapperを完全解説!初心者でも理解できるレスポンス処理のしくみ
JavaのScannerクラスの使い方を徹底解説!初心者でも簡単に学べる入力処理
JavaのArrayListクラスとaddメソッドを完全解説!初心者でもわかるリスト操作
Javaの@Idアノテーションを徹底解説!初心者でもわかるデータベースとの連携方法
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.3
Java&Spring記事人気No3
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.4
Java&Spring記事人気No4
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.5
Java&Spring記事人気No5
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
JSPとは何か?初心者向けにできること・仕組み・特徴をやさしく解説