Springにおける「RestController」と「Controller」の違いとは:どう使い分けるとよいのか
Javaの開発フレームワーク「Spring Framework」におけるControllerとRestControllerの違い、Restful API開発時にRestControllerを使用するメリットを紹介する。
SpringのControllerとRestControllerの主な違いは、Controllerアノテーションを付けたクラスがクライアントにレスポンスを返す前にデータをフォーマットするレンダリングフェーズを別途呼び出すのに対し、RestControllerアノテーションを付けたクラスはレンダリングフェーズをスキップしてHTTPレスポンスのボディーにJSON、テキストまたはXMLを直接埋め込む点にある。
Springの@RestControllerが付与されたクラスは、HTTPリクエストを処理する全メソッドに暗黙的に@ResponseBodyアノテーションを追加する。
Controllerはどう動くのか
Spring Web ControllerクラスでHTTPリクエストを処理する際、全てのメソッドで、次の3つのタスクが実行される。
- 受信したリクエストを調査し、関連データを抽出する
- リクエストを処理し、必要なバックエンドシステムとやりとりする
- クライアントに返すレスポンスのために必要なデータをJavaBeansに格納する
リッチWebクライアントからのリクエストの場合、Controllerはカスタムレンダリング機能を呼び出して、JavaBeansのデータを視覚的に魅力のある方法でフォーマットする。Spring BootおよびSpring MVCでは、一般的に以下のテンプレートエンジンとレンダリングテクノロジーが使用される。
- JSP
- Thymeleaf
- FreeMarker
- 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.
関連記事
- Oracle、「Java 22」「Oracle JDK 22」を提供開始
Oracleはプログラミング言語と開発プラットフォームである「Java」の最新版「Java 22」と、Java開発キット「Oracle JDK 22」の一般提供を開始した。 - マイクロサービスの原則をプラットフォームエンジニアリングにもたらす「Dapr」とは?
マイクロサービスが主流となる中、マイクロサービス向けに開発された「Dapr」が、プラットフォームエンジニアにとって魅力的なものとなっている。 - オープンソースのRust製コードエディタ「Zed」、ClaudeベースのAIアシスタント機能「Zed AI」を発表
オープンソースのRust製コードエディタ「Zed」を提供するZed Industriesは「Zed AI」を発表した。初期リリース中はZedにサインインすることで無料で利用できるという。