48.3.3. より高度な応答の処理

概要

Response クラスメソッドは、一般的なケースの応答を作成するためのショートカットを提供します。キャッシュ制御ディレクティブの指定、カスタム HTTP ヘッダーの追加、または Response クラスで処理されていないステータスの送信など、より複雑なケースに対応する必要がある場合は、build() メソッドを使用してレスポンスオブジェクトを生成する前に、ResponseBuilder クラスメソッドを使用してレスポンスを入力する必要があります。

「応答ビルダーの取得」 で説明されているように、Apache CXF ResponseBuilderImpl クラスを使用して直接操作できるレスポンスビルダーインスタンスを作成できます。

カスタムヘッダーの追加

カスタムヘッダーは、ResponseBuilder クラスの header() メソッドを使用してレスポンスに追加されます。header() メソッドは、2 つのパラメーターを取ります。

  • name - ヘッダー名を指定する文字列
  • value - ヘッダーに格納されたデータを含む Java オブジェクト

header() メソッドを繰り返し呼び出すと、メッセージに複数のヘッダーを設定することができます。

応答へのヘッダーの追加 は、応答にヘッダーを追加するコードを示します。

応答へのヘッダーの追加

import javax.ws.rs.core.Response;
import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;

ResponseBuilderImpl builder = new ResponseBuilderImpl();
builder.header("username", "joe");
Response r = builder.build();

クッキーの追加

カスタムヘッダーは、ResponseBuilder クラスの cookie() メソッドを使用してレスポンスに追加されます。cookie() メソッドは 1 つ以上のクッキーを取ります。各クッキーは javax.ws.rs.core.NewCookie オブジェクトに保存されます。最も簡単に使用できる NewCookie クラスのコンストラクターは、2 つのパラメーターを取ります。

  • name - クッキーの名前を指定する文字列
  • value - クッキーの値を指定する文字列

cookie() メソッドを繰り返し呼び出して、複数のクッキーを設定できます。

応答へのクッキーの追加 は、クッキーを応答に追加するコードを示します。

応答へのクッキーの追加

import javax.ws.rs.core.Response;
import javax.ws.rs.core.NewCookie;

NewCookie cookie = new NewCookie("username", "joe");

Response r = Response.ok().cookie(cookie).build();

警告

null パラメーターリストで cookie() メソッドを呼び出すと、すでに応答に関連付けられているクッキーが消去されます。

応答ステータスの設定

Response クラスのヘルパーメソッドでサポートされないステータスを返す場合は、ResponseBuilder クラスの status() メソッドを使用してレスポンスのステータスコードを設定することができます。status() メソッドには 2 つのバリアントがあります。1 つは、レスポンスコードを指定する int を取ります。もう 1 つは Response.Status オブジェクトを取り、応答コードを指定します。

Response.Status クラスは、Response クラスで囲まれた列挙型です。定義されたほとんどの HTTP 応答コードに、エントリーがあります。

応答へのヘッダーの追加 に、応答ステータスを 404 Not Found に設定するコードを示します。

応答へのヘッダーの追加

import javax.ws.rs.core.Response;
import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;

ResponseBuilderImpl builder = new ResponseBuilderImpl();
builder.status(404);
Response r = builder.build();

キャッシュ制御ディレクティブの設定

ResponseBuilder クラスの cacheControl() メソッドを使用すると、レスポンスにキャッシュ制御ヘッダーを設定することができます。cacheControl() メソッドは、応答のキャッシュ制御ディレクティブを指定する javax.ws.rs.CacheControl オブジェクトを取ります。

CacheControl クラスには、HTTP 仕様でサポートされるすべてのキャッシュ制御ディレクティブに対応するメソッドがあります。ディレクティブが簡単な on または off の値である場合、setter メソッドは boolean の値を取ります。ディレクティブは max-age ディレクティブなどの数値が必要であるため、setter は int の値を取ります。

応答へのヘッダーの追加 は、no-store キャッシュ制御ディレクティブを設定するコードを表しています。

応答へのヘッダーの追加

import javax.ws.rs.core.Response;
import javax.ws.rs.core.CacheControl;
import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;

CacheControl cache = new CacheControl();
cache.setNoCache(true);

ResponseBuilderImpl builder = new ResponseBuilderImpl();
builder.cacheControl(cache);
Response r = builder.build();