PLAY2.6-SCALA(二) 数据的返回与保存

1.修改默认的Content-Type

自动设置内容类型为text/plain

val textResult = Ok("Hello World!")

自动设置内容类型为application/xml.

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

手动设置类型

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

2.添加或更新http请求头

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

cookies是一个特殊格式的http请求头

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

丢弃一个浏览器中之前存储的cookie

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

设置或移除cookie后,回复不变

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

改变文本的编码格式,默认格式为utf-8

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)
  }

}

3.数据的保存(只能保存String类型,最多4KB数据)

session:保存在会话中的数据在整个用户会话期间都有效

flash scope:只在下次请求可用

3.1 session

session的配置(配置application.conf)

session的设置

Ok("Welcome!").withSession( "connected" -> "[email protected]")

插入一个元素

Ok("Hello World!").withSession( request.session + ("saidHello" -> "yes"))

删除一个元素

Ok("Theme reset!").withSession(request.session - "theme")

读取session中的数据

def index = Action { request =>
  request.session.get("connected").map { user =>
    Ok("Hello " + user)
  }.getOrElse {
    Unauthorized("Oops, you are not connected")
  }
}

清除整个session

Ok("Bye").withNewSession

3.2 Flash scope

flash中的数据仅保存到下一个request中,且未被签名保护。因此flash仅用于在非Ajax请求中传送成功或失败信息

//检查flash中是否有success信息
def index = Action { implicit request => Ok { request.flash.get("success").getOrElse("Welcome!") } } //在保存一条信息后,想要将页面重定向到初始页面,并且想要在初始页面中显示一条信息表示保存成功,就可以使用flash def save = Action { Redirect("/home").flashing( "success" -> "The item has been created") }

获取Flash scope中的值

@()(implicit flash: Flash)
...
@flash.get("success").getOrElse("Welcome!")
...


def index = Action { implicit request =>
  Ok(views.html.index())
}

猜你喜欢

转载自www.cnblogs.com/feiyumo/p/9132518.html