以编程方式获取Play中的路线!框架2.5.x

时间:2016-03-18 15:39:42

标签: scala playframework routing swagger

play-swagger模块中,我们使用play.routes.compiler.RoutesFileParser从Play获取所有已注册的路由,并进一步将其解析为API文档:

val parsedRoutes = RoutesFileParser.parse(new File(app.classloader.getResource(routesFile).toURI))
val routes = parsedRoutes.right.get.collect {
  case (route: PlayRoute) => {
    logger.debug(s"Adding route '$route'")
    Seq(route.copy(path = route.path.copy(parts = StaticPart(prefix + "/") +: route.path.parts)))
  }
  case (include: PlayInclude) => {
    logger.debug(s"Processing route include $include")
    parseRoutesHelper(playRoutesClassNameToFileName(include.router), include.prefix)
  }
}.flatten

这会导致以下错误: java.lang.NoClassDefFoundError: play/routes/compiler/RoutesFileParser

似乎RoutesFileParser在Play中变得私密! 2.5。

如上例所示,获取所有Play路线的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

这绝对是一个依赖性问题。检查dependencyTree。

如果它不存在,则将以下内容添加到构建文件中:

"com.typesafe.play" %% "routes-compiler" % "2.5.0"

然后这将编译并运行得很好:

val routesURI = app.classloader.getResource("routes").toURI
val parsedRoutes = play.routes.compiler.RoutesFileParser.parse(new File(routesURI))
println(parsedRoutes)

(其中app是play.api.Application的运行实例)

答案 1 :(得分:0)

浏览Play的源代码时,我发现我可以使用以下内容:

.or(ProjectUser.arel_table[:user_id].eq(id))

这将使用HTTP方法,路径,方法调用打印出String元组。这是DEV 404页面上的路由的呈现方式。