Menu Close
48.3. アプリケーションの応答の調整
48.3.1. 応答構築の基本
概要
RESTful サービスは、多くの場合、リソースメソッドがプレーンな Java 構造を返すときに許可されるよりも、コンシューマーに返されるレスポンスをより正確に制御する必要があります。JAX-RS Response
クラスを使用すると、リソースメソッドがコンシューマーに送信される戻り値をある程度制御し、応答に HTTP メッセージヘッダーとクッキーを指定できます。
Response
オブジェクトは、コンシューマーに返されるエンティティーを表すオブジェクトをラップします。Response
オブジェクトは ResponseBuilder
クラスをファクトリーとして使用してインスタンス化されます。
ResponseBuilder
クラスには、応答のメタデータを操作するために使用されるメソッドも多数あります。たとえば、ResonseBuilder
クラスには、HTTP ヘッダーとキャッシュ制御ディレクティブを設定するメソッドが含まれます。
応答と応答ビルダーの関係
Response
クラスには保護されたコンストラクターがあるため、直接インスタンス化することはできません。これらは、Response
クラスによって囲まれた ResponseBuilder
クラスを使用して作成されます。ResponseBuilder
クラスは、そこから作成された応答にカプセル化されるすべての情報のホルダーです。ResponseBuilder
クラスには、メッセージに HTTP ヘッダープロパティーを設定するすべてのメソッドもあります。
Response
クラスは、適切な応答コードの設定とエンティティーのラップを容易にするメソッドを提供します。共通の応答ステータスコードにはそれぞれメソッドがあります。エンティティーボディーまたは必要なメタデータを含むステータスに対応するメソッドには、情報を直接関連する応答ビルダーに設定できるようにするバージョンが含まれます。
ResponseBuilder
クラスの build()
メソッドは、メソッドが呼び出される際に応答ビルダーに保存されている情報が含まれる応答オブジェクトを返します。応答オブジェクトが返されると、応答ビルダーがクリーンな状態に戻ります。
応答ビルダーの取得
Response
クラスを使用した応答ビルダーの取得 に示すように、Response
クラスの静的メソッドを使用します。Response
クラスを使用した応答ビルダーの取得import javax.ws.rs.core.Response; Response r = Response.ok().build();
応答ビルダーを取得すると、複数のステップで操作できるインスタンスにアクセスできなくなります。すべてのアクションを単一のメソッド呼び出しに文字列化する必要があります。
Apache CXF 固有の
ResponseBuilderImpl
クラスの使用。このクラスを使用すると、レスポンスビルダーを直接操作できます。ただし、すべての応答ビルダーの情報を手作業で設定する必要があります。例48.1「
ResponseBuilderImpl
クラスを使用した応答ビルダーの取得」 は、ResponseBuilderImpl
クラスを使用してResponse
クラスを使用した応答ビルダーの取得 を書き換える方法を表しています。例48.1
ResponseBuilderImpl
クラスを使用した応答ビルダーの取得import javax.ws.rs.core.Response; import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl; ResponseBuilderImpl builder = new ResponseBuilderImpl(); builder.status(200); Response r = builder.build();
注記Response
クラスのメソッドから返されるResponseBuilder
をResponseBuilderImpl
オブジェクトに割り当てることもできます。
詳細情報
Response
クラスの詳細は、Response
クラスの Javadoc を参照してください。
ResponseBuilder
クラスの詳細は、ResponseBuilder
クラスの Javadoc を参照してください。
Apache CXF ResponseBuilderIml
クラスの詳細は、ResponseBuilderImpl
Javadoc を参照してください。