我以这种方式设置了应用程序加载器:

class MyProjectApplicationLoader extends ApplicationLoader {
  def load(context: Context): Application = new ApplicationComponents(context).application
}

class ApplicationComponents(context: Context) extends BuiltInComponentsFromContext(context)
  with QAControllerModule
  with play.filters.HttpFiltersComponents {

  // set up logger
  LoggerConfigurator(context.environment.classLoader).foreach {
    _.configure(context.environment, context.initialConfiguration, Map.empty)
  }

  lazy val router: Router = {
    // add the prefix string in local scope for the Routes constructor
    val prefix: String = "/"
    wire[Routes]
  }
}

但是我的路线是自定义的,因此如下所示:
routes文件:
-> /myApi/v1 v1.Routes
-> /MyHealthcheck HealthCheck.Routes

和我的v1.Routes文件:
GET    /getData    controllers.MyController.getData

所以现在当我编译项目时,我得到了这个错误:



所以我不确定如何解决这个问题,有人知道我该如何使加载程序与这种路由结构一起工作?

最佳答案

@marcospereira的回答是正确的,但也许代码有误。

该错误是由于routes文件引用了v1.routes导致的-将其编译为参数类型为Routesv1.Routes类。

您可以在target/scala-2.12/routes/main/router/v1中查看生成的代码。

因此,要连接Router,您需要一个v1.Router实例。要创建v1.Route r实例,您首先需要连接它。

这是解决上述示例的一种方法:

lazy val router: Router = {
  // add the prefix string in local scope for the Routes constructor
  val prefix: String = "/"
  val v1Routes = wire[v1.Routes]
  wire[Routes]
}

关于scala - 如何设置 Play Framework ApplicationLoader和Macwire以使用自定义路由?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44912215/

10-13 00:19