I'm using iheartradio/play-swagger lib to generate swagger.json to server UI. I'm not able to set nested variable(title under info) inside swagger.yml. Though I can set, for example host variable.
swagger.yml
swagger: "2.0"
info:
description: "API"
version: "1.0.0"
title: "Brand API"
host: "api.radio"
tags:
- name: "brand"
Here is swagger controller code
val authUrl = "brand"
lazy val swagger = Action { request =>
generator.generate().map(_ + ("title" -> JsString(authUrl))).fold(
e => InternalServerError("Couldn't generate swagger."),
s => Ok(s))
}
One way to add a property in a nested piece of JSON is to use JsObject#deepMerge
.
In your example, replace
generator.generate().map(_ + ("title" -> JsString(authUrl)))
With:
val toMerge = Json.parse(s"""{ "info": { "title": "$authUrl" } }""") // or build it manually
generator.generate().map(_.deepMerge(toMerge))