Scala Play自定义过滤器中的request.attrs.get什么时候返回None?

问题描述 投票:1回答:1

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。

scala filter playframework routes
1个回答
0
投票

根据Route modifier tags

[请注意,HandlerDef请求属性仅在以下情况下存在:使用Play从routes文件生成的路由器。该属性是当代码中定义了路由时,例如使用Scala SIRD或Java RoutingDsl。在这种情况下request.attrs.get(HandlerDef)将在Scala中返回None或在Scala中返回nullJava。创建过滤器时请记住这一点。

因此,如果您正在使用routes文件,则Router.Attrs.HandlerDef应该始终可用。作为简写而不是

val handlerDef: HandlerDef = request.attrs.get(Router.Attrs.HandlerDef).get

您可以像这样使用apply

val handlerDef: HandlerDef = request.attrs(Router.Attrs.HandlerDef)
© www.soinside.com 2019 - 2024. All rights reserved.