3、Manipulating Results 結果操作
阿新 • • 發佈:2018-11-16
修改預設的content-type
執行結果的content-type是通過response中的返回值來自動推測的,
例如:
val textResult = Ok("Hello World!")
將自動設定 Content-Type 的頭為 text/plain。
val xmlResult = Ok(<message>Hello World!</message>)
將自動設定Content-Type為application/xml.
這是一種非常不錯的使用方法,但是有的時候想指定特定的Content-type,只需要使用as(newContentType)方法在result上,就可以建立一個值相同Content-type不同的
resultval htmlResult = Ok(<h1>Hello World!</h1>).as("text/html")
或者使用
val htmlResult2 = Ok(<h1>Hello World!</h1>).as(HTML)
設定和丟棄cookies
我們可以簡單的去操作cookies,將cookie放入到返回瀏覽起的response中
增加東西到cookies中
val result = Ok("Hello world") .withCookies(Cookie("theme", "blue")) .bakeCookies()
在cookies中刪除
val result2 = result.discardingCookies(DiscardingCookie("theme"))
在設定和刪除共同在同一個命令中進行操作
val result3 = result.withCookies(Cookie("theme", "blue")).discardingCookies(DiscardingCookie("skin"))
操縱HTTP標頭
您還可以向結果新增(或更新)任何HTTP標頭:
val result = Ok("Hello World!").withHeaders( CACHE_CONTROL -> "max-age=3600", ETAG -> "xx")
請注意,如果原始結果中存在對應的值,則設定HTTP標頭將自動丟棄之前的值
設定編碼型別:
在http返回中,設定正確的編碼型別是非常重要的,Play是預設使用utf-8的
charset的作用是將返回的資訊通過某種編碼方式轉化成對應的socket傳遞的位元組,通過;charset=xxx 來設定
class Application @Inject()(cc: ControllerComponents) extends AbstractController(cc) {
implicit val myCustomCharset = Codec.javaSupported("iso-8859-1")
def index = Action {
Ok(<h1>Hello World!</h1>).as(HTML)
}
}
def HTML(implicit codec: Codec) = {
"text/html; charset=" + codec.charset
}