Springにおける「RestController」と「Controller」の違いとはどう使い分けるとよいのか

Javaの開発フレームワーク「Spring Framework」におけるControllerとRestControllerの違い、Restful API開発時にRestControllerを使用するメリットを紹介する。

» 2024年09月20日 08時00分 公開
[Cameron McKenzieTechTarget]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 SpringのControllerとRestControllerの主な違いは、Controllerアノテーションを付けたクラスがクライアントにレスポンスを返す前にデータをフォーマットするレンダリングフェーズを別途呼び出すのに対し、RestControllerアノテーションを付けたクラスはレンダリングフェーズをスキップしてHTTPレスポンスのボディーにJSON、テキストまたはXMLを直接埋め込む点にある。

 Springの@RestControllerが付与されたクラスは、HTTPリクエストを処理する全メソッドに暗黙的に@ResponseBodyアノテーションを追加する。

Controllerはどう動くのか

 Spring Web ControllerクラスでHTTPリクエストを処理する際、全てのメソッドで、次の3つのタスクが実行される。

  1. 受信したリクエストを調査し、関連データを抽出する
  2. リクエストを処理し、必要なバックエンドシステムとやりとりする
  3. クライアントに返すレスポンスのために必要なデータをJavaBeansに格納する

 リッチWebクライアントからのリクエストの場合、Controllerはカスタムレンダリング機能を呼び出して、JavaBeansのデータを視覚的に魅力のある方法でフォーマットする。Spring BootおよびSpring MVCでは、一般的に以下のテンプレートエンジンとレンダリングテクノロジーが使用される。

  1. JSP
  2. Thymeleaf
  3. FreeMarker
  4. Mustache

 開発者は、これらのテクノロジーを使用して、Controllerが生成したデータをWebブラウザで簡単に表示できるHTMLなどのマークアップに変換する。RESTfulクライアントはマークアップデータを必要とせず、データがJSON、XML、またはプレーンテキストの形式で返されることだけを求める。そこにControllerとRestControllerの主な違いがある。

RestControllerと従来のSpring MVCの違い

 約10年前にリリースされたSpring Frameworkバージョン4以前では、レンダリング手順をスキップしたい開発者は、メソッドに@ResponseBodyアノテーションを追加していた。これにより、ControllerのHTTP要求処理メソッドから返されるデータがSpringによってJSONまたはXMLに自動的に変換され、HTTPレスポンスのボディーに埋め込まれた(そのためこのアノテーションは@ResponseBodyと名付けられている)。

 当然、その結果として、Spring Boot REST APIの全てのメソッドに@ResponseBodyアノテーションを追加する必要が生じた。SpringのRestControllerの唯一の目的は、RESTful APIの全てのメソッドにこのアノテーションを追加する手間をなくすことにある。

RestControlleとControllerの使い分け

 SpringのRestControllerは、Controllerと同じことを全て行うが、HTTPリクエストを処理する全てのメソッドに@ResponseBodyアノテーションを暗黙のうちに追加する。それだけが、SpringのRestControllerとControllerの唯一の技術的違いになる。

 Spring Bootを使ってRESTful APIを作成する場合は、クラスにRestControllerアノテーションを追加し、SpringによってJavaBeansがJSONまたはXMLに自動変換されるようにする。データを意味のある方法でマークアップしたい場合は、これまで通りControllerアノテーションを使って、Spring MVCフレームワークのレンダリングフェーズに処理させる。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。