Spring Boot

アノテーション @Controller @RestController

@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の違いのまとめ

アノテーション主な用途戻り値の形式用途
@ControllerWebページ(HTMLやJSPなど)ビュー名(テンプレート名)テンプレートエンジンでのビュー
@RestControllerREST API(JSONやXML形式のデータ)データそのもの(JSON/XML)Web APIエンドポイント

まとめ

  • @Controllerは、HTTPリクエストを受けてWebページ(HTMLなど)を返すために使用されます。
  • 通常、テンプレートエンジンを使用し、Modelを介してビューにデータを渡します。
  • REST APIでは@RestControllerを使用し、JSONやXMLデータを直接返します。
  • 役割に応じて@Controller@RestControllerを使い分けることで、WebページとAPIエンドポイントを簡単に構築できます。
スポンサーリンク
タイトルとURLをコピーしました