Skip to content

Latest commit

 

History

History
145 lines (111 loc) · 6.94 KB

File metadata and controls

145 lines (111 loc) · 6.94 KB

レスポンスの変更

デフォルトの Content-Type の変更

レスポンスのコンテンツタイプは、レスポンスボディとして指定された Scala の値から自動的に推論されます。

例えば、

@content-type_text

このように記述した場合は、Content-Type ヘッダに text/plain がセットされます。また、

@content-type_xml

このように記述した場合は、Content-Type ヘッダに application/xml がセットされます。

Tip: この Content-Type の推論は、play.api.http.ContentTypeOf という型クラスによって実現されています。

これはかなり便利な機能ですが、Content-Type を任意に変更したいこともあるでしょう。そんな時は、Result の as(newContentType) というメソッドを呼び出して、Content-Type ヘッダを変更した新たなレスポンスを生成しましょう。

@content-type_html

次のように、もう少し良い書き方もできます。

@content-type_defined_html

Note: "text/html" の代わりに HTML を利用するメリットは、フレームワークが charset を自動的に決定してくれるため、実際の Content-Type には text/html; charset=utf-8 がセットされるということです。この機能については、[[すぐ後|ScalaResults#テキストベースの-HTTP-レスポンスの-charset-を変更する]]で説明します。

HTTP ヘッダの変更

任意の HTTP ヘッダを追加または更新することもできます。

@set-headers

既に値が存在する HTTP ヘッダに何か値をセットすると、上書きにより以前の値は自動的に破棄されてしまうことを覚えておいてください。

cookie の設定と破棄

Cookie は HTTP ヘッダの特殊形でしかありませんが、扱いを楽にするためいくつかのヘルパーが用意されています。

次のように、HTTP レスポンスへ Cookie を簡単に追加することができます。

@set-cookies

また、既に Web ブラウザに保存されている Cookie を破棄させるには、次のように書きます。

@discarding-cookies

同じレスポンスの中で cookie の設定と破棄を行うこともできます:

@setting-discarding-cookies

テキストベースの HTTP レスポンスの charset を変更する

テキストベースの HTTP レスポンスについては、charset を適切に処理することがとても重要です。Play はデフォルトで utf-8 を使い、この処理を行います(UTF-8を使う理由参照)。

charset はテキストベースのレスポンスをバイトデータに変換してネットワークソケット経由で送信できるようにしたり、Content-Type ヘッダを適切な ;charset=xxx で更新するために利用されます。

charset は play.api.mvc.Codec という型クラスにより自動的に決定されます。全操作で利用される charset を変更するためには、play.api.mvc.Codec のインスタンスを implicit val として現在のスコープ内に定義してください。

@full-application-set-myCustomCharset

上記の例では、implicit な charset 値がスコープ内に定義されているため、Ok(...) メソッドにおいて XML メッセージを ISO-8859-1 エンコードされたバイトデータへ変換すること、また text/html; charset=iso-8859-1 という Content-Type ヘッダを生成することの二つの目的で利用されます。

ここで、HTML メソッドが一体何をしているのか疑問に思った方のために、定義をご紹介しておきます。

@Source-Code-HTML

一般的な方法で charset を扱う必要がある場合は、自身の API においてこれらと同じように扱うことができます。