Documentation

You are viewing the documentation for the 2.2.0 release in the 2.2.x series of releases. The latest stable release series is 2.4.x.

§レスポンスの変更

§デフォルトの 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 は 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");
}

次ページ: セッションとフラッシュスコープ