@Controllerアノテーションは、Spring MVCフレームワークにおいてリクエストを処理するコントローラー(Controller)クラスを定義するために使用されます。Spring MVCでは、コントローラーがクライアント(主にWebブラウザ)からのリクエストを受け取り、適切なレスポンスを返す役割を担います。
ただし、@Controller自体はWebページ(HTMLやJSP)を返すためのコントローラーに使われることが多く、REST APIのエンドポイントを作成する場合には、@RestControllerを使うことが一般的です。
@Controllerアノテーションの役割
- リクエストの受け口:
@Controllerが付与されたクラスは、Spring MVCによって「コントローラー」として認識され、HTTPリクエストを受け付けるエントリポイントとなります。 - ビュー(HTMLページなど)の返却: 通常、
@Controllerはテンプレートエンジン(Thymeleaf、JSP、FreeMarkerなど)を使用して、HTMLページなどのビューを返すことを想定しています。メソッドの戻り値にはビュー名を指定し、そのビューがレンダリングされてクライアントに返されます。 @RequestMappingや@GetMappingなどのメソッドアノテーションと一緒に使うことで、特定のURLパスに対する処理を設定できます。
使い方の例
次に@Controllerを使った簡単な例を示します。
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to the Home Page!");
return "home"; // "home"というビュー名を返し、ThymeleafやJSPでhome.htmlまたはhome.jspをレンダリングする
}
}
このコードでは以下のことが行われています:
@Controllerアノテーション:HomeControllerクラスがコントローラーとして扱われるようSpringに指示します。@GetMapping("/home")アノテーション:/homeパスでのGETリクエストに対してhomeメソッドが実行されます。Modelオブジェクト: ビューに渡すデータ(messageという文字列)をセットし、homeビューがレンダリングされる際に表示できるようにしています。- 戻り値の
home: ビュー名homeを指定し、この名前に対応するテンプレートファイル(home.htmlなど)を表示します。
@RestControllerとの違い
@Controllerは通常、HTMLやテンプレートを使ったWebページを返すために使用される一方、@RestControllerはJSONやXML形式のデータを返すREST APIのエンドポイントを構築する際に使用されます。
例えば、REST APIのコントローラーでは、以下のように@RestControllerが用いられます。
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
@RestController
public class ApiController {
@GetMapping("/api/message")
public String getMessage() {
return "Hello from REST API"; // JSON形式で文字列を返す
}
}
@Controllerと@RestControllerの違いのまとめ
| アノテーション | 主な用途 | 戻り値の形式 | 用途 |
|---|---|---|---|
@Controller | Webページ(HTMLやJSPなど) | ビュー名(テンプレート名) | テンプレートエンジンでのビュー |
@RestController | REST API(JSONやXML形式のデータ) | データそのもの(JSON/XML) | Web APIエンドポイント |
まとめ
@Controllerは、HTTPリクエストを受けてWebページ(HTMLなど)を返すために使用されます。- 通常、テンプレートエンジンを使用し、
Modelを介してビューにデータを渡します。 - REST APIでは
@RestControllerを使用し、JSONやXMLデータを直接返します。 - 役割に応じて
@Controllerと@RestControllerを使い分けることで、WebページとAPIエンドポイントを簡単に構築できます。
