openapi-springboot-json-and.../templates/homeController.mustache

90 lines
3.0 KiB
Plaintext
Raw Normal View History

2023-10-07 04:41:23 +00:00
package {{basePackage}}
import org.springframework.context.annotation.Bean
import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.RequestMapping
{{#sourceDocumentationProvider}}
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper
import org.springframework.beans.factory.annotation.Value
import org.springframework.core.io.Resource
import org.springframework.util.StreamUtils
import org.springframework.web.bind.annotation.ResponseBody
import org.springframework.web.bind.annotation.GetMapping
{{/sourceDocumentationProvider}}
{{^sourceDocumentationProvider}}
{{#useSwaggerUI}}
import org.springframework.web.bind.annotation.ResponseBody
import org.springframework.web.bind.annotation.GetMapping
{{/useSwaggerUI}}
{{/sourceDocumentationProvider}}
{{#reactive}}
import org.springframework.web.reactive.function.server.HandlerFunction
import org.springframework.web.reactive.function.server.RequestPredicates.GET
import org.springframework.web.reactive.function.server.RouterFunction
import org.springframework.web.reactive.function.server.RouterFunctions.route
import org.springframework.web.reactive.function.server.ServerResponse
import java.net.URI
{{/reactive}}
{{#sourceDocumentationProvider}}
import java.nio.charset.Charset
{{/sourceDocumentationProvider}}
/**
* Home redirection to OpenAPI api documentation
*/
@Controller
class HomeController {
{{#useSwaggerUI}}
{{^springDocDocumentationProvider}}
{{#sourceDocumentationProvider}}
private val apiDocsPath = "/openapi.json"
{{/sourceDocumentationProvider}}
{{#springFoxDocumentationProvider}}
private val apiDocsPath = "/v2/api-docs"
{{/springFoxDocumentationProvider}}
{{/springDocDocumentationProvider}}
{{/useSwaggerUI}}
{{#sourceDocumentationProvider}}
private val yamlMapper = YAMLMapper()
@Value("classpath:/openapi.yaml")
private lateinit var openapi: Resource
@Bean
fun openapiContent(): String {
return openapi.inputStream.use {
StreamUtils.copyToString(it, Charset.defaultCharset())
}
}
@GetMapping(value = ["/openapi.yaml"], produces = ["application/vnd.oai.openapi"])
@ResponseBody
fun openapiYaml(): String = openapiContent()
@GetMapping(value = ["/openapi.json"], produces = ["application/json"])
@ResponseBody
fun openapiJson(): Any = yamlMapper.readValue(openapiContent(), Any::class.java)
{{/sourceDocumentationProvider}}
{{#useSwaggerUI}}
{{^springDocDocumentationProvider}}
@GetMapping(value = ["/swagger-config.yaml"], produces = ["text/plain"])
@ResponseBody
fun swaggerConfig(): String = "url: $apiDocsPath\n"
{{/springDocDocumentationProvider}}
{{#reactive}}
@Bean
fun index(): RouterFunction<ServerResponse> = route(
GET("/"), HandlerFunction<ServerResponse> {
ServerResponse.temporaryRedirect(URI.create("swagger-ui.html")).build()
})
{{/reactive}}
{{^reactive}}
@RequestMapping("/")
fun index(): String = "redirect:swagger-ui.html"
{{/reactive}}
{{/useSwaggerUI}}
}