改變默認的Content-Type
結果的內容類型是自動地通過的指定的相應體的Scala值推斷而來。
例如:
val textResult=Ok("Hello World!")
將會自動的設置Content-Type頭為text/plain,而:
將會設置?Content-Type?頭為application/xml。
.提示:這是通過play.api.http.ContentTypeOf類型的類完成。
這是十分有用的,但是有時你想改變它,就只是在結果上使用as(newContentType)方法創建一個新的使用不同Content-Type頭的類似的結果:
val htmlResult=Ok(
Hello World!
).as("text/html")
或使用更好的方式:
val htmlResult2=Ok(
Hello World!
).as(HTML)
注意:使用HTML替代"text/html"的好處是字符集將會被自動的處理,并且實際的Content-Type頭將會被設置為text/html;charset=utf-8。我們將會看到這一點。
操作HTTP頭
你也可以為結果添加(或者更新)任何HTTP頭:
val result=Ok("Hello World!").withHeaders(CACHE_CONTROL->"max-age=3600",ETAG->"xx")
注意,如果原來的值里有HTTP頭,那么在設置HTTP頭將會自動的去掉。
設置和去掉Cookies
Cookies只是HTTP頭的特殊格式。但是我們提供了一組幫助類,讓它更容易使用。
你可以容易的增加一個Cookie到HTTP相應,使用:
val result=Ok("Hello world").withCookies(Cookie("theme","blue"))
當然也會去掉在網絡流量器上之前存儲的Cookie:
val result2=result.discardingCookies(DiscardingCookie("theme"))
你也可以設置或移除Cookie作為相同響應的部分:
val result3=result.withCookies(Cookie("theme","blue")).discardingCookies(DiscardingCookie("skin"))
改變基于HTTP響應文本的字符集
對于基于HTTP響應文本來說,正確的處理字符集是非常重要的。Play為你處理這些,并默認使用UTF-8.
字符集即被被用來報轉換文本響應轉換成相應的字節發送給網絡套接字,也被用來使用適當的;charset=xxx擴展更新 Content-Type頭。
play.api.mvc.Codec?類自動的處理字符集。只需要在正確的作用域導入一個play.api.mvc.Codec的隱式引用來改變將被所有操作使用的數據集:
class ? Application extends Controller {
implicit val myCustomCharset=Codec.javaSupported("iso-8859-1")def index=Action{Ok(
Hello World!
).as(HTML)}}
這里,由于在作用域內有一個隱式的數據集值,它將即在Ok(...) 方法中用來轉換XML信息為 ISO-8859-1也生成 text/html; charset=iso-8859-1Content-Type 頭。
現在,如果你想知道HTML方法的原理,這里是它是怎么定義的:
defHTML(implicit codec:Codec)={"text/html; charset="+codec.charset}
如果你需要使用通用的方式處理字符集,?你可以在你的API中這樣做。