結局@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