我知道我可以在Ok(...).withCookies(...)
返回动作时设置 cookie。但是我想知道是否有办法通过操作request
对象来设置一些 cookie。这样我就可以在我的模型中设置一些 cookie,而我的控制器只需要将它们发回。
问问题
2007 次
1 回答
6
我这样做只是作为练习,也是为了表明 Play 框架非常灵活,它不会在任何意义上限制你。我完全从 Play 源代码中弄清楚了如何做到这一点,它非常干净且易于阅读。这不是HttpRequest
使用 cookie 或实际上使用Play 中的对象的首选方式。正如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)
于 2013-08-07T08:36:30.850 回答