Sharable

システム&ウェブのシェアラブル

Lv.4 Responseをいじってみよう。[play framework2.0] [java]

2012年3月27日

レスポンスは、Controllerクラスからresponse()メソッドを呼ぶことで取得できます。
play.mvc.HTTP.Responseクラスが取得できます。
このresponse()やResultに情報を追加・削除することで、かなり柔軟にレスポンスをいじる
ことができます。

目次

Content-Typeをいじる

変える方法は3種類。

自動変更

たとえばok()などのResultを生成するメソッドによって、自動で変更される。

//text/plain
Result textResult = ok("Hello World!");

//application/json
Result jsonResult = ok(jerksonObject);

Resultのas()メソッド

Result htmlResult = ok("<h1>Hello World!</h1>")
.as("text/html");

レスポンスに指定する

public static Result index() {
 response().setContentType("text/html");
 return ok("<h1>Hello World!</h1>");
}

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>");
}

以下のコードでheadernamesも書き出せます。

Map<String,String> map = response().getHeaders();
Set<String> set = map.keySet();
for (String key : set)
  System.out.println(key + ":" + map.get(key));

その他のヘッダーをまとめておきます。
play.mvc.HTTPにpublic static interface HeaderNamesとして記述されています。

変数名 内容
ACCEPT “Accept”
ACCEPT_CHARSET “Accept-Charset”
ACCEPT_ENCODING “Accept-Encoding”
ACCEPT_LANGUAGE “Accept-Language”
ACCEPT_RANGES “Accept-Ranges”
AGE “Age”
ALLOW “Allow”
AUTHORIZATION “Authorization”
CACHE_CONTROL “Cache-Control”
CONNECTION “Connection”
CONTENT_ENCODING “Content-Encoding”
CONTENT_LANGUAGE “Content-Language”
CONTENT_LENGTH “Content-Length”
CONTENT_LOCATION “Content-Location”
CONTENT_MD5 “Content-MD5”
CONTENT_RANGE “Content-Range”
CONTENT_TRANSFER_ENCODING “Content-Transfer-Encoding”
CONTENT_TYPE “Content-Type”
COOKIE “Cookie”
DATE “Date”
ETAG “Etag”
EXPECT “Expect”
EXPIRES “Expires”
FROM “From”
HOST “Host”
IF_MATCH “If-Match”
IF_MODIFIED_SINCE “If-Modified-Since”
IF_NONE_MATCH “If-None-Match”
IF_RANGE “If-Range”
IF_UNMODIFIED_SINCE “If-Unmodified-Since”
LAST_MODIFIED “Last-Modified”
LOCATION “Location”
MAX_FORWARDS “Max-Forwards”
PRAGMA “Pragma”
PROXY_AUTHENTICATE “Proxy-Authenticate”
PROXY_AUTHORIZATION “Proxy-Authorization”
RANGE “Range”
REFERER “Referer”
RETRY_AFTER “Retry-After”
SERVER “Server”
SET_COOKIE “Set-Cookie”
SET_COOKIE2 “Set-Cookie2”
TE “Te”
TRAILER “Trailer”
TRANSFER_ENCODING “Transfer-Encoding”
UPGRADE “Upgrade”
USER_AGENT “User-Agent”
VARY “Vary”
VIA “Via”
WARNING “Warning”
WWW_AUTHENTICATE “WWW-Authenticate”

クッキーをいじる

//クッキーも簡単に設定できる。
response().setCookie("theme", "blue");

//消去も。
response().discardCookies("theme");

エンコーディングをいじる

デフォルトはutf-8です。
ContentTypeに「;charset=xxx」を追記することで指定できます。

public static Result index() {
 response().setContentType("text/html; charset=iso-8859-1");
 return ok("<h1>Hello World!</h1>", "iso-8859-1");
}

アセスメント

  • Content-typeをtext/htmlにする方法が分かる
  • レスポンスのヘッダーにCACHE_CONTROLを設定する方法が分かる
  • エンコーディングをiso-8859-1に設定する方法が分かる

今回参照しているplayフレームワーク2.0の公式ドキュメントは、
Manipulating the response
です。

このエントリーをはてなブックマークに追加