首页 > 解决方案 > 播放路线:将不同文件夹中的资产路由到单独的路径中

问题描述

我开发了一个简单的 Play 应用程序,它使用 AngularJS 作为前端,并使用 SwaggerUI 作为方便的前端来测试 Play 的端点。生成的前端资产的项目结构如下所示:

prj/build
      +- ui
      |  +- dist
      |    +- <compiled typescript assets into js files> 
      |    +- index.html (which include above js files with relative path)
      +- swagger-ui
      |    +- <swagger-ui.js etc...> 
      |    +- index.html (which include above js files with relative path)

我想要实现的是:

但是,播放路线设置让我很头疼:如果我只设置两者之一(要么 要么//api,它就可以工作。例如

GET        /api          controllers.Assets.at(path = "/swagger-ui", file = "index.html")
GET        /*file        controllers.Assets.at(path = "/swagger-ui", file)

很好,我可以看到招摇的 UI;如果我尝试像这样将所有这些组合在一起

GET        /             controllers.Assets.at(path = "/ui/dist", file = "index.html")
GET        /*file        controllers.Assets.at(path = "/ui/dist", file) # (1)
GET        /api          controllers.Assets.at(path = "/swagger-ui", file = "index.html")
GET        /api/*file    controllers.Assets.at(path = "/swagger-ui", file)

常规应用程序有效,但是Action Not Found当我尝试访问时我会从 Play 中获得一个,/api因为(1)优先;无论我如何改组资产路线,或修改它们的参数,由于其工作原理,我似乎无法让它们都值得Assets.at(...)

我想出的最接近的解决方案是覆盖默认的 SwaggerUI index.html,并在每个 js 资源路径前加上swagger-ui/前缀;这样,主应用程序 UI 和 swagger ui 都可以工作,但感觉有点 hackish。

有没有办法使用正确的播放路线语法正确地实现这一点?或者可能定义两个资产控制器,一个用于主应用程序,一个用于 swagger-ui?

谢谢!

标签: playframeworkroutesswagger-ui

解决方案


推荐阅读