2

我正在使用 Scala 和 Play 2.5 开发微服务,并尝试使用 Swagger 记录我的端点。

我将 Swagger UI webjar 添加到我的依赖项中:

"org.webjars" % "swagger-ui" % "2.1.8-M1"

还有 Swagger Play2 插件:

"io.swagger" %% "swagger-play2" % "1.5.3"

注意:Swagger Play2 插件的 1.5.3 版本尚未正式发布。我从项目的 master 分支构建它,因为它是唯一可以与 Play 2.5.8 一起使用的版本,这是我正在使用的版本。

然后,我将以下内容添加到我的路线文件中:

GET         /assets/*file                   controllers.Assets.at(path="/public", file)
GET         /api-docs                       controllers.ApiHelpController.getResources

通过这样做,我可以通过以下方式访问 Swagger UI:

http://localhost:9000/assets/lib/swagger-ui/index.html?/url=http://localhost:9000/api-docs

但是,这是一个巨大的 URL。我想将它简化为像根 (/) 这样简单的东西,但存在以下挑战:

  1. 如何让 Play2 动态地将url参数传递给静态 HTML 页面?我如何才能将主机和端口调整为运行服务的服务器上的任何内容?我考虑过使用controllers.Default.redirect,但我找不到在参数字符串中插入主机和端口的方法。
  2. 如何映射/assets/lib/swagger-ui/index.html传递url参数?
4

1 回答 1

2

这是无需任何硬编码的 url 和端口号就可以使事情正常工作的最佳方法

  1. 添加路由来处理重定向

GET /swaggerDocs controller.Application.redirectDocs

  1. 使用您知道的相同逻辑,但只使用相对 URL 而不是绝对 URL。
def redirectDocs = Action {
    Redirect(url = "/assets/lib/swagger-ui/index.html", queryString = Map("url" -> Seq("/api-docs")))
}
于 2017-04-05T13:48:44.967 回答