1. 程式人生 > >3、Manipulating Results 結果操作

3、Manipulating Results 結果操作

修改預設的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
}