🌱

結局@Controllerって何?Spring初心者のための超入門

に公開

1. はじめに

Spring Frameworkを学び始めると、最初の方に出てくる謎のアノテーション「@Controller」。
なんとなく「Webに関係してるんだろうな」と思いながら使っている人も多いのではないでしょうか。

でも、結局これって何をしているの?なぜ必要なの?

この記事では、Spring初心者にもわかりやすいように「@Controller」について丁寧に解説していきます。

2. @Controllerとは

@Controllerは、Spring MVC(Model-View-Controller)というWebアプリケーションを作るための仕組みで使われるアノテーションです。

簡単に言うと、「このクラスはWebリクエストを受け取るよ」とSpringに教える役割を持っています。

たとえば、ブラウザから「/hello」というURLにアクセスがあったときに、どのJavaクラスのどのメソッドでそれを処理するかをSpringが判断するために、この@Controllerが使われます。

3. なぜ@Controllerが必要なの?

JavaだけでWebアプリケーションを作る場合、Servletを使ってHTTPリクエストやレスポンスを一つ一つ手作業で書く必要があります。これが非常に大変。

そこで登場したのがSpring MVCです。

Spring MVCは、@Controllerアノテーションを使うことで「このクラスはリクエストを処理するクラスですよ」とSpringに伝え、複雑な処理を自動化してくれるのです。

4. @RestControllerとの違い

よく混乱されがちなのが「@RestController」との違いです。

実は、

@RestController = @Controller + @ResponseBody

という関係になっています。

つまり、@RestControllerを使うと、HTMLテンプレートを返すのではなく、JSONなどのデータ(APIレスポンス)を返すようになります。

  • @Controller → HTMLページを返すときに使う
  • @RestController → JSONなどのデータを返すときに使う

という使い分けが基本です。

5. サンプルコードと解説

@Controller
public class HelloController {
    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "こんにちは!");
        return "hello";
    }
}

このコードは、/helloというURLにアクセスがあったときに、hello.htmlというテンプレートを返す例です。

  • @GetMapping("/hello"):GETリクエストのURLとメソッドを紐付け
  • Model:テンプレートに渡すデータを設定
  • return "hello"hello.htmlというテンプレートファイルを返す

Thymeleafなどのテンプレートエンジンと組み合わせると、動的なHTMLページを返すことができます。

6. こんな時に使う

@Controllerは以下のようなときに使います:

  • サーバー側でHTMLページを生成して返したいとき
  • フォームの入力処理やバリデーション結果をHTMLで返したいとき
  • ThymeleafやJSPを使って、WebアプリケーションのUIを作成したいとき

7. よくあるミスとハマりポイント

初心者がつまずきがちなポイントもいくつか紹介しておきます:

  • @RestControllerにしてるのにHTMLテンプレートを返そうとしてエラーになる
  • returnする文字列がテンプレートファイル名と一致していない
  • テンプレートファイルがresources/templates以下に存在しない

このようなミスに注意しながら使ってみてください。

8. まとめ

  • @Controllerは、Spring MVCで「Webリクエストを処理するクラスですよ」とSpringに教えるためのアノテーション
  • HTMLテンプレートを返すときに使う
  • APIを返したいときは@RestControllerを使う

初心者のうちは「何となく使ってる」でもOK。でも、この記事を読んだことで「なるほど、こういう意味があるのか」と少しでも理解が深まれば嬉しいです!

Discussion