在Play请求中添加属性会产生新的请求实例吗?

时间:2018-04-09 22:39:29

标签: scala playframework playframework-2.6

如果像我一样,你来自Java Servlet世界,Play对请求属性的支持(最近在2.6版本中引入)的时间太长了。现在,我已经有机会仔细研究它了,我想知道它是否可用。

从文档中逐字逐句(Scala):

// Create a TypedKey to store a User object
object Attrs {
  val User: TypedKey[User] = TypedKey.apply[User]("user")
}
// Get the User object from the request
val user: User = req.attrs(Attrs.User)
// Put a User object into the request
val newReq = req.addAttr(Attrs.User, newUser)

我了解并理解不可变对象的功能概念,但是如果要将此片段解释为向请求添加属性的行为让我持有新请求,那么我该怎么办呢!?在回调的反应世界中, Play 是否将请求传递给我的代码,而不是相反?如果我无法在操作中附加属性然后在错误处理程序中检查它,那么这有什么用呢?希望我在这里错过了一些东西......

1 个答案:

答案 0 :(得分:0)

您可以通过过滤器将属性附加到请求。 https://www.playframework.com/documentation/2.6.x/ScalaHttpFilters

然后,过滤器可以将 new 请求传递给框架,然后框架会将其提供给您的处理程序。

编辑:

将修改后的(新)请求传递回框架:

...
nextFilter(requestHeader.addAttr(Attrs.User, newUser))
...