在an answer to "How to run filter on demand scala play framework"中,建议使用以下代码:
// in your filter
val handlerDef: Option[HandlerDef] = request.attrs.get(Router.Attrs.HandlerDef)
我不确定这里发生了什么-在此val上将.get
安全(将其从Option中剔除)是否安全?在什么情况下此代码会导致None
(即Router.Attrs.HandlerDef
何时不出现)?
我正在使用Scala和PlayFramework 2.6。
[请注意,
HandlerDef
请求属性仅在以下情况下存在:使用Play从routes
文件生成的路由器。该属性是当代码中定义了路由时,例如使用Scala SIRD或JavaRoutingDsl
。在这种情况下request.attrs.get(HandlerDef)
将在Scala中返回None
或在Scala中返回null
Java。创建过滤器时请记住这一点。
因此,如果您正在使用routes
文件,则Router.Attrs.HandlerDef
应该始终可用。作为简写而不是
val handlerDef: HandlerDef = request.attrs.get(Router.Attrs.HandlerDef).get
您可以像这样使用apply
糖
val handlerDef: HandlerDef = request.attrs(Router.Attrs.HandlerDef)