我可以在Play Framework 2中返回操作之前设置cookie吗?

时间:2013-08-06 18:46:58

标签: scala cookies playframework playframework-2.0

我知道在返回动作时我可以在Ok(...).withCookies(...)中设置Cookie。但是我想知道是否有办法通过操纵request对象来设置一些cookie。所以我可以在我的模型中设置一些cookie,我的控制器只需要将它们发回去。

1 个答案:

答案 0 :(得分:6)

我这样做只是为了锻炼,而且还表明Play框架非常灵活,并且在任何意义上都不会限制你。我想出了如何纯粹从Play源代码中做到这一点,它非常干净且易于阅读。 NOT 是使用Cookie或在Play中使用HttpRequest对象的首选方式。正如Jatin建议您将cookie解码为正确的模型,将这些模型传递给您的服务,然后将服务结果转换为play.api.mvc.Result,从而保持您的http和业务逻辑层分离。

这是代码(您可以看到Headers对象不打算以这种方式使用):

import play.api.http.HeaderNames.COOKIE

val cookies = Cookies(request.headers.get(COOKIE)).cookies

val myCookies = cookies + ("cookieName" -> Cookie("cookieName", "cookieValue"))

val headersMap = request.headers.toMap

val myHeaderMap = headersMap +  
      (COOKIE -> Seq(Cookies.encode(myCookies.values.toSeq)))

val myHeaders = new play.api.mvc.Headers {
  val data:Seq[(String, Seq[String])] = myHeaderMap.toSeq
}

val modifiedRequest = request.copy(headers = myHeaders)