如何在play框架中获取所有Route URL字符串的列表?

obl*_*ion 4 scala playframework

我的play 2.4.x应用程序中有很多控制器.

我想得到一个all route URLs指向各自控制器的列表.我知道如何从当前请求中获取URL.但我需要一个播放应用程序中可用的所有URL列表.我想generate this list dynamically because URLs can be changed/added/deleted in future.

那么,有什么方法可以动态生成这个URL列表?或者我是否有义务将所有URL静态存储在缓存或字典中的某个位置?

obl*_*ion 6

我使用Router traitdocumentation提供的方法获得了所需的列表.文档方法返回.每个元组都有以下格式:Seq[(String, String, String)]

({http-method},{url},{controller method})

路由器特点是所有自动生成的扩展Routes.scala类.Scala编译器Routes.scalaroutes应用程序中的每个文件生成一个单独的文件.这些自动生成的Routes.scala文件实现了Router trait的所有方法,包括我们上面讨论过的文档方法.

因此,要获取所有URL的列表,我只需要inject the Router trait访问documentation method:

import play.api.routing.Router

class MyClass @Inject()(router: Router) {
 def getAllURLs:Seq[String] = router.documentation.map(k => k._2)
}
Run Code Online (Sandbox Code Playgroud)