4
我知道我可以在返回一個動作時在Ok(...).withCookies(...)
中設置cookie。不過,我想知道是否有辦法通過操作request
對象來設置一些cookie。所以我可以在我的模型中設置一些cookie,我的控制器只需要將它們發回。在Play Framework 2中返回操作之前,我可以設置Cookie嗎?
我知道我可以在返回一個動作時在Ok(...).withCookies(...)
中設置cookie。不過,我想知道是否有辦法通過操作request
對象來設置一些cookie。所以我可以在我的模型中設置一些cookie,我的控制器只需要將它們發回。在Play Framework 2中返回操作之前,我可以設置Cookie嗎?
我這樣做只是爲了鍛鍊,並且還表明Play框架非常靈活,並且不限制您的任何意義。我想通過Play源代碼純粹做到這一點,它非常乾淨,易於閱讀。這是不是在Play中使用Cookie或確實與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)
如果我理解正確的問題,你想在從你的請求對象和基本得到一些信息一些其他的計算設置cookie? 'withCookies'有什麼問題?你可以在所得到的數組上創建一個'Cookie'數組,最後爲數組提供'withCookies'。 – Jatin