Spring Bootの@Controllerと@RestControllerの違いをやさしく解説!

こんにちは。ゆうせいです。

Spring Bootを使い始めると、@Controller@RestControllerという2つのアノテーションが出てきますよね。

見た目は似ているのに、どう使い分けるのか分からない…!と悩む新人エンジニアの方も多いはず。

今回はこの2つの違いを、できるだけわかりやすく、例え話や図を使って説明します!


まず結論!@Controllerと@RestControllerの違いはこれ!

アノテーション返すもの特徴
@ControllerHTMLビュー(テンプレート)Webページを表示する用途
@RestControllerJSONや文字列などのデータAPIとして使う用途(REST)

それぞれの役割を丁寧に見ていこう!

@Controllerとは?

これは「Webページを返すためのコントローラー」です。

例えば、Thymeleaf(タイムリーフ)などのテンプレートエンジンと組み合わせて、HTMLファイルを返すときに使います。

例:

@Controller
public class WebPageController {

    @GetMapping("/home")
    public String showHomePage() {
        return "home"; // templates/home.html を表示する
    }
}

return "home"とすると、Spring Bootはresources/templates/home.htmlというHTMLファイルを探して表示します。


@RestControllerとは?

こちらは「データ(JSONや文字列など)を返すためのコントローラー」です。

いわゆるWeb APIを作るときに使います。画面ではなく、ブラウザやアプリがデータだけを受け取るような用途に使われます。

例:

@RestController
public class ApiController {

    @GetMapping("/api/hello")
    public String sayHello() {
        return "Hello, API!";
    }
}

この場合、返ってくるのは「Hello, API!」という文字列(JSON形式)です。HTMLのテンプレートは使いません。


実は@RestControllerは@Controller+@ResponseBody

Spring内部ではこうなっている!

@RestController
= @Controller + @ResponseBody

つまり、@RestControllerはデータをそのままHTTPレスポンスとして返すように最初から設定されているということです。

@ResponseBodyとは?

これは「返り値をテンプレートにせず、そのままHTTPレスポンスに使って」と指示するアノテーションです。

@Controller + @ResponseBodyの例:

@Controller
public class SampleController {

    @GetMapping("/text")
    @ResponseBody
    public String sendText() {
        return "これはデータとして返します";
    }
}

上記は@RestControllerで書くのと同じ動きになります。

例え話で理解しよう!

Controllerは「レストランのホール係」、RestControllerは「テイクアウト専門店」

  • @Controllerは、お客様に料理(HTMLページ)をお皿に盛って提供するタイプ。
  • @RestControllerは、料理をパック詰めしてすぐに渡す(JSONなどの生データ)タイプ。

見た目は似ているけど、提供スタイルがまったく違うんですね!


どっちを使えばいいの?

目的使うアノテーション
Webページを作る(テンプレートを使う)@Controller
スマホアプリや他のサービス向けのAPIを作る@RestController

よくある質問

Q. @RestControllerでHTMLを返せる?

A. 返せません。HTMLファイルを返したいなら必ず@Controllerを使ってください

Q. @ControllerだけでもJSONは返せる?

A. @ResponseBodyを併用すれば可能ですが、基本的にAPIを作るなら@RestControllerの方が自然です。


今後の学習のポイント

次はこんなトピックを学ぶと理解が深まります!

  • Spring MVCとテンプレートエンジン(Thymeleafなど)
  • REST APIの設計とHTTPメソッド(GET, POST, PUT, DELETEなど)
  • JSONの構造と使い方
  • Spring Bootでのリクエスト/レスポンスのカスタマイズ

特にWeb APIを作る機会が増える今、@RestControllerの理解は超重要です!

わからないところがあったら、いつでも聞いてくださいね。いっしょにレベルアップしていきましょう!


セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。