如何通过Scala路由DSL获取控制器中操作的绝对URL?

如何通过Scala路由DSL获取控制器中操作的绝对URL?,scala,playframework,playframework-2.0,playframework-2.5,Scala,Playframework,Playframework 2.0,Playframework 2.5,最初,我使用默认路由方法,在conf目录中指定路由 现在我切换到Play的路由DSL,我的路由器如下所示: package controllers.app.api import javax.inject.Inject import play.api.routing.Router.Routes import play.api.routing.SimpleRouter import play.api.routing.sird._ class UserRouter @Inject()(contr

最初,我使用默认路由方法,在
conf
目录中指定路由

现在我切换到Play的路由DSL,我的路由器如下所示:

package controllers.app.api

import javax.inject.Inject

import play.api.routing.Router.Routes
import play.api.routing.SimpleRouter
import play.api.routing.sird._

class UserRouter @Inject()(controller: UserController) extends SimpleRouter {

  val prefix = "/v1/users"

  override def routes: Routes = {

    case POST(p"/") =>
      controller.doStuff()

  }

}
我的问题是,如何获取
controller.doStuff()
的绝对URL?在进行切换之前,我使用了以下代码:

controllers.app.api.routes.UserController.doStuff().absoluteURL()
但现在我总是得到以下错误:

object routes is not a member of package controllers.app.api
一般情况

controllers.app.api.routes.UserController.doStuff().absoluteURL()
如果UserController与调用方在同一个包中,则

routes.UserController.doStuff().absoluteURL()

记住,Request或RequestHeader必须在隐式范围内

我相信您只需要执行
routes.UserController.doStuff().absoluteURL()
。可能重复@CyrilleCorpet No,我这里处理的是一个多模块项目,聚合多个模块之间的反向路由以防止循环依赖。感谢您的帮助!然而,这正是我尝试的方式(请阅读我的问题)。我试图在多模块播放项目中使用反向路由和播放的路由DSL。显然,路由DSL不支持反向路由。