§レスポンスの変更
§デフォルトの Content-Type の変更
レスポンスのコンテンツタイプは、レスポンスボディとして指定された Java の値から自動的に推論されます。
例えば、
Result textResult = ok("Hello World!");
のように記述した場合は、Content-Type
ヘッダに text/plain
がセットされます。また、
JsonNode json = Json.toJson(object);
Result jsonResult = ok(json);
のように記述した場合は、Content-Type
ヘッダに application/json
がセットされます。
これはかなり便利な機能ですが、Content-Type
を任意に変更したいこともあるでしょう。そんな時は、Result の as(newContentType)
というメソッドを呼び出して、Content-Type
ヘッダを変更した新たなレスポンスを生成しましょう。
Result htmlResult = ok("<h1>Hello World!</h1>").as("text/html");
HTTP レスポンスのコンテキストにコンテントタイプを指定する事もできます。
public Result index() {
response().setContentType("text/html");
return ok("<h1>Hello World!</h1>");
}
§HTTP レスポンスヘッダの指定
public 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");
パスやドメイン、有効期限、セキュアか否か、そして HTTP only フラグがセットされるべきか否かなどを含む詳細を設定する必要がある場合は、オーバーロードされたメソッドを使うことができます:
response().setCookie(
"theme", // name
"blue", // value
3600, // maximum age
"/some/path", // path
".example.com", // domain
false, // secure
true // http only
);
すでに web ブラウザに格納された Cookie を破棄する場合は、以下のようにします:
response().discardCookie("theme");
ブラウザは名前、パス、そしてドメインが一致している場合にのみ cookie を破棄するので、cookie をセットする際にパスやドメインを設定している場合は、cookie を破棄する際にパスまたはドメインを設定していることを確認してください。
§テキストのレスポンスの文字コードを指定する
テキストベースの HTTP レスポンスについては、文字エンコーディングを適切に処理することがとても重要です。Play はデフォルトで utf-8
を使い、この処理を行います。
文字エンコーディングはテキストベースのレスポンスをバイトデータに変換してネットワークソケット経由で送信できるようにしたり、Content-Type
ヘッダに適切な ;charset=xxx
を付与するために利用されます。
文字エンコーディングは Result
の値を生成する時に指定できます。
public Result index() {
response().setContentType("text/html; charset=iso-8859-1");
return ok("<h1>Hello World!</h1>", "iso-8859-1");
}
Next: セッションとフラッシュスコープ
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。