如何在Play框架2 Scala应用程序中遍历路由?

3

在Playframework 2 Scala中,play.mvc.Router.routes的等效方法是什么?

在playframework 1.x中,我可以在控制器中遍历可用路由:

for(Route route:Router.routes){
    ...
}

我该如何在PlayFramework 2 Scala中实现这个功能?
看起来,dev mode template未找到,但可以在模板中迭代它们,但我需要在控制器中实现这一点。
1个回答

8

在Play 2.0中,您无法真正这样做。

路由被定义为PartialFunction [RequestHeader,Handler],没有办法知道此函数的域。

尽管如在not found模板中所示,但可以检索有关应用程序路由的一些信息:Play 2.0路由器生成一个documentation字段,返回应用程序的每个路由的HTTP方法(GET PUT 等),其路径模式以及在conf/routes文件中编写的调用方式。

路由器生成一个Routes对象,在启动时由您的Play应用程序加载,您可以按以下方式访问它:

for {
  routes <- play.api.Play.current.routes.toList
  (method, pattern, call) <- routes.documentation
} yield {
  …
}

有没有办法通过反射来获取更多的信息呢?事实上,我希望能够为我的API生成文档。 - Somatik
以上示例似乎无法正常工作 -> 未找到:值路由。我需要导入一些内容吗? - Somatik
确实,'Routes'对象是在运行时加载的,因此在编译时它不会在类路径中显示。我已编辑了代码片段,请告知是否可行。 - Julien Richard-Foy
类型不匹配;找到:Seq[Unit],需要:Option[?] - 我担心我的Scala技能还不足以自行修复这个问题。 - Somatik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接