§レスポンスの変更
§デフォルトの Content-Type の変更
レスポンスのコンテンツタイプは、レスポンスボディとして指定された Java の値から自動的に推論されます。
例えば、
Result textResult = ok("Hello World!");
のように記述した場合は、Content-Type
ヘッダに text/plain
がセットされます。また、
Result jsonResult = ok(jerksonObject);
のように記述した場合は、Content-Type
ヘッダに application/json
がセットされます。
これはかなり便利な機能ですが、Content-Type
を任意に変更したいこともあるでしょう。そんな時は、Result の as(newContentType)
というメソッドを呼び出して、Content-Type
ヘッダを変更した新たなレスポンスを生成しましょう。
Result htmlResult = ok("<h1>Hello World!</h1>").as("text/html");
HTTP レスポンスにコンテントタイプを指定する事も出来ます。
public static Result index() {
response().setContentType("text/html");
return ok("<h1>Hello World!</h1>");
}
§HTTP レスポンスヘッダの指定
任意の HTTP ヘッダを追加または更新することができます。
public static Result index() {
response().setContentType("text/html");
response().setHeader(CACHE_CONTROL, "max-age=3600");
response().setHeader(ETAG, "xxx");
return ok("<h1>Hello World!</h1>");
}
既に値が存在する HTTP ヘッダに何か値をセットすると、以前の値は自動的に破棄されてしまうことを覚えておいてください。
§cookie の設定と破棄
Cookie は HTTP ヘッダの特殊形でしかありませんが、扱いを楽にするためいくつかのヘルパーが用意されています。
次のように、HTTP レスポンスへ Cookie を簡単に追加することができます。
response().setCookie("theme", "blue");
また、既に Web ブラウザに保存されている Cookie を破棄させるには、次のように書きます。
response().discardCookies("theme");
§テキストのレスポンスの文字コードを指定する
テキストベースの HTTP レスポンスについては、文字エンコーディングを適切に処理することがとても重要です。Play はデフォルトで utf-8
を使い、この処理を行います。
文字エンコーディングはテキストベースのレスポンスをバイトデータに変換してネットワークソケット経由で送信できるようにしたり、Content-Type
ヘッダに適切な ;charset=xxx
を付与するために利用されます。
文字エンコーディングは Result
の値を生成する時に指定できます。
public static Result index() {
response().setContentType("text/html; charset=iso-8859-1");
return ok("<h1>Hello World!</h1>", "iso-8859-1");
}
次ページ: セッションとフラッシュスコープ