/** * Publish application routes as Swagger spec. * * @param app An application. */ public void install(final Jooby app) { requireNonNull(app, "Application is required."); ObjectMapper mapper = Json.mapper(); ObjectWriter yaml = Yaml.pretty(); app.use(new SwaggerModule(mapper)); app.get(path + "/swagger.json", path + "/:tag/swagger.json", req -> { SwaggerBuilder sb = req.require(SwaggerBuilder.class); Swagger swagger = sb.build(req.param("tag").toOptional(), predicate, tag, Swagger.class); byte[] json = mapper.writer().withDefaultPrettyPrinter().writeValueAsBytes(swagger); return Results.json(json); }).name("swagger(json)"); app.get(path + "/swagger.yml", path + "/:tag/swagger.yml", req -> { SwaggerBuilder sb = req.require(SwaggerBuilder.class); Swagger swagger = sb.build(req.param("tag").toOptional(), predicate, tag, SwaggerYml.class); byte[] yml = yaml.writeValueAsBytes(swagger); return Results.ok(yml).type("application/yaml"); }).name("swagger(yml)"); if (ui) { app.assets(path + "/ui/**", "/META-INF/resources/webjars/swagger-ui/" + wjversion(app.getClass()) + "/{0}"); app.get(path, path + "/:tag", new SwaggerHandler(path)) .name("swagger(html)") .produces(MediaType.html); } }