【问题标题】:How to get ROUTE_PATTERN from request in play 2.6 scala如何从 play 2.6 scala 中的请求中获取 ROUTE_PATTERN
【发布时间】:2025-11-29 18:55:02
【问题描述】:

我在 play 2.5 中提取了 ROUTE_PATTERN:

request.tags.get("ROUTE_PATTERN")

现在我更新了 play 2.6 并且这段代码不再工作了。我在这里阅读了播放文档: What’s new in Play 2.6

我试过了:

object Attrs {
    val RoutePattern: TypedKey[String] = TypedKey("ROUTE_PATTERN")
  }
  request.attrs.get(Attrs.RoutePattern)

它总是返回无。如何在 play 2.6 中获取请求的 RoutePattern?

【问题讨论】:

    标签: scala playframework playframework-2.6


    【解决方案1】:

    来自2.6 migration guide

    如果您使用了任何Router.Tags.* 标签,您应该更改您的代码以使用新的Router.Attrs.HandlerDef (Scala)....

    这个新属性包含一个HandlerDef 对象,其中包含当前在标签中的所有信息。当前标签都对应HandlerDef对象中的一个字段......

    HandlerDef中对应旧ROUTE_PATTERN标签的字段是path

    import play.api.routing.{ HandlerDef, Router }
    import play.api.mvc.RequestHeader
    
    val handler = request.attrs(Router.Attrs.HandlerDef)
    val routePattern = handler.path
    

    【讨论】:

    • 顺便问一下,请求的默认标签(不是属性)上是否有文档页面?不是迁移页面,而是专用页面。 2.5 和 2.6 都找不到。