使用 iheartradio/play-swagger 为 swagger.yml play 应用程序设置嵌套变量

Set nested variables for swagger.yml play app using iheartradio/play-swagger

我正在使用 iheartradio/play-swagger 库生成 swagger.json 到服务器 UI。我无法在 swagger.yml 内设置嵌套变量(信息下的标题)。虽然我可以设置,例如主机变量。

swagger.yml

  swagger: "2.0"
    info:
      description: "API"
      version: "1.0.0"
      title: "Brand API"
    host: "api.radio"
    tags:
    - name: "brand"

这是 swagger 控制器代码

val authUrl = "brand"
lazy val swagger = Action { request =>
        generator.generate().map(_ + ("title" -> JsString(authUrl))).fold(
          e => InternalServerError("Couldn't generate swagger."),
          s => Ok(s))
      }

在 JSON 的嵌套片段中添加 属性 的一种方法是使用 JsObject#deepMerge.

在你的例子中,替换

generator.generate().map(_ + ("title" -> JsString(authUrl)))

与:

val toMerge = Json.parse(s"""{ "info": { "title": "$authUrl" } }""") // or build it manually
generator.generate().map(_.deepMerge(toMerge))