博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【二 HTTP编程】3. 控制Results
阅读量:6548 次
发布时间:2019-06-24

本文共 1806 字,大约阅读时间需要 6 分钟。

  hot3.png

修改默认的Content-Type

result的Content-Type会从response body的值中自动推断。举例如下:

val textResult = Ok("Hello World!")

上面的代码会自动将Content-Type设置为text/plain,如下情况:

val xmlResult = Ok(
Hello World!
)

 会自动将Content-Type设置为application/xml。

提示:真正的作用类是 play.api.http.ContentTypeOf 。

默认设置能应付大部分情况,但有时你也会想手动设置。这是你只需要在result上调用 as(newContentType) 来创建一个新的Http Header:

val htmlResult = Ok(

Hello World!

).as("text/html")

或者使用更优雅的方式:

val htmlResult2 = Ok(

Hello World!

).as(HTML)

注意:使用HTML代替"text/html"的好处在于它能自动帮你设置字符集,如上面的Header最终形式将会是 text/html; charset = utf-8。

手动设置HTTP headers

你可以为result任意添加/修改HTTP头:

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

注意后设置Header将覆盖先设置的同名值。

设置/丢弃cookies

Cookies是特殊的HTTP头,Play提供了一系列针对Cookies的辅助方法。

你可以在HTTP响应中简单添加Cookie如下:

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

同样可以这样来让Web浏览器丢弃保存的Cookie:

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

你可以在同一个响应中这样来设置/移除cookies:

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

修改text格式HTTP响应的编码

正确处理text格式的HTTP响应字符集十分重要。Play默认的字符集是utf-8。

编码将被用来:1)将text响应转换为正确格式的二进制并在网络上传输;2)使用适当的 ;charset=xxx 扩展来更新Context-Type。

编码通过play.api.mvc.Codec类被自动处理。你可以在当前上下文隐式引入一个play.api.mvc.Codec实例:

class Application @Inject()(cc: ControllerComponents) extends AbstractController(cc) {    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-1 Content Header。

如果你想了解HTML的工作原理,来看看它的定义吧:

def HTML(implicit codec: Codec) = {    "text/html; charset=" + codec.charset}

当你需要构建自己的API来处理字符集时,请参考上面的模式。

转载于:https://my.oschina.net/landas/blog/1927205

你可能感兴趣的文章
程序员常用借口指南
查看>>
awk 常用方法
查看>>
Android网络框架实现之【Retrofit+RxJava】
查看>>
Android文件的加密与解密
查看>>
【原】记录一句话
查看>>
Android标题栏,状态栏
查看>>
java笔记:SpringSecurity应用(二)
查看>>
php记录代码执行时间
查看>>
简简单单几段代码让自己变成最合格的网站管理员
查看>>
Slim Text 0.0.9 发布, 代码开源!
查看>>
[置顶] 遵循Java EE标准体系的开源GIS服务平台之二:平台部署
查看>>
Java递归算法——阶乘
查看>>
Multi-voltage和power gating的实现
查看>>
JavaScript面向对象 ~ 原型和继承(1)
查看>>
spring cloud微服务分布式云架构--hystrix的使用
查看>>
解决Mac启动Eclipse Memory Analyzer报错问题
查看>>
自己写的进度条###
查看>>
实现批量添加20个用户,用户名为user1-50,密码为user后面跟5个随机字符
查看>>
Net命令详解
查看>>
00.java虚拟机的基本结构概念
查看>>