[Play Framework]Manipulating Results——操作结果

5 篇文章 0 订阅

更改默认的内容类型

响应的实体内容的类型通常来说是被编译器通过Scala返回值类型推断出来的。例如:

val textResult = Ok("Hello World!")

该结果会被编译器在response中写为Content-Type: text/plain,而对于:

val xmlResult = Ok(<message>Hello World!</message>)

会被认为是Content-Type: application/xml。

注意:这些类型的都是由play.api.http.ContentTypeOf来确定的。

上述内容是非常有用的,但是有些时候却需要手动设置响应内容的类型。可以使用as(newContentType)方法来创建一个不同header的响应,其Content-Type不同,但是内容类似:

val htmlResult = Ok(<h1>Hello World!</h1>).as("text/html")

更好的使用方法为:

val htmlResult2 = Ok(<h1>Hello World!</h1>).as(HTML)

注意:使用HTML代替text/html时,字符集会被系统自动的设置。如果使用text/html时可以通过附加字符集的方式设置响应的字符集。例如:charset=utf-8

操作HTTP头

同样的,也可以手动操作和处理HTTP头:

val result = Ok("Hello World!").withHeaders(
  CACHE_CONTROL -> "max-age=3600",
  ETAG -> "xx")

需要注意的是,如果手动处理了HTTP头的内容,原先已有的设定值会被替代掉。

设置和去除cookies

Cookies是HTTP头的一种特殊形式,这里Play框架提供了一组处理器帮助使用者简化Cookies的操作。
首先,可以简便的在HTTP的Response中设置Cookie:

val result = Ok("Hello world").withCookies(
  Cookie("theme", "blue"))

同时,也可以删除之前已经设定的Cookie:

val result2 = result.discardingCookies(DiscardingCookie("theme"))

在同一个Response中同时去除和设置Cookies:

val result3 = result.withCookies(Cookie("theme", "blue")).discardingCookies(DiscardingCookie("skin"))

为基于文本的HTTP响应更改字符集

使基于文本的HTTP响应用正确的字符集进行处理是非常重要的。Play框架在处理这些响应时是使用UTF-8字符集作为默认字符集的。

字符集通常用于1)将文本响应转换成适合通过网络Socket传播的适当的字节码;2)更改响应头中的Content-Type的内容为——“;charSet=xxx”。

字符集的处理通常是自动的通过play.api.mvc.Codec进行的。通过引入一个隐式的play.api.mvc.Codec的实例,可以将当前作用域内的字符集设置为你想要的字符集。

object Application extends Controller {

  implicit val myCustomCharset = Codec.javaSupported("iso-8859-1")

  def index = Action {
    Ok(<h1>Hello World!</h1>).as(HTML)
  }

}

正是由于当前作用域内的这个隐式的对象,可以使用OK{…}方法返回一个基于ISO-8859-1编码的字节码流,也可以通过生成text/html;charset=iso-8859-1作为响应头部Content-Type的内容。

如果想要了解这段字符集定义的隐式转换是如何工作的,下面便是它是如何定义的:

def HTML(implicit codec: Codec) = {
  "text/html; charset=" + codec.charset
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值