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