@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エンドポイントを簡単に構築できます。