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();