Маршруты воспроизведения: маршрутизируйте ресурсы в разных папках в разные пути - PullRequest
1 голос
/ 19 февраля 2020

Я разработал простое приложение 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)

Я бы хотел добиться:

  • маршрутизации пользовательского интерфейса основного приложения, ui/dist/index.html , на localhost/
  • перенаправить пользовательский интерфейс приложения, swagger-ui/index.html, на localhost/api

Однако настройка «Воспроизведение маршрутов» вызывает у меня головную боль: если я просто настрою один из двух (либо /, либо /api), он работает. Например,

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

в порядке, и я вижу чванливый пользовательский интерфейс; если я попытаюсь объединить их все вместе, как это, хотя

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 по умолчанию. html и предварять каждый путь ресурса js префиксом swagger-ui/; Таким образом, работает как основной интерфейс приложения, так и пользовательский интерфейс Swagger, но это выглядит как хаки sh.

Есть ли способ добиться этого, используя правильный синтаксис маршрутов воспроизведения? или, возможно, определение двух контроллеров Assets, одного для основного приложения и одного для swagger-ui?

Спасибо!

...