Spring Bootにおいて、@RestController
と@Controller
はどちらもリクエストを受け取ってレスポンスを返すために使用されるアノテーションですが、その用途や挙動には明確な違いがあります。
まず、@Controller
は従来のMVC(Model-View-Controller)パターンで使用されるアノテーションで、主にHTMLなどのビューを返すために使われます。メソッドの戻り値はテンプレートエンジン(ThymeleafやJSPなど)を通じて画面として描画されます。もしJSONなどのデータを返したい場合は、メソッドに@ResponseBody
を付ける必要があります。
一方、@RestController
は@Controller
に@ResponseBody
が組み合わされたアノテーションです。そのため、すべてのメソッドの戻り値が自動的にHTTPレスポンスボディとして出力され、通常はJSON形式でクライアントに返されます。REST APIを開発する際に非常に便利で、明示的に@ResponseBody
を付ける必要がない分、コードがシンプルになります。
結論として、画面表示が目的なら@Controller
、APIのレスポンスとしてデータを返すなら@RestController
を選ぶのがベストです。用途に応じて正しく使い分けることが、保守性の高いアプリケーション開発につながります。