All Downloads are FREE. Search and download functionalities are using the official Maven repository.

kotlin-spring.springfoxDocumentationConfig.mustache Maven / Gradle / Ivy

There is a newer version: 7.9.0
Show newest version
package {{basePackage}}

import org.springframework.beans.factory.annotation.Value
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.web.util.UriComponentsBuilder
import springfox.documentation.builders.ApiInfoBuilder
import springfox.documentation.builders.RequestHandlerSelectors
import springfox.documentation.service.ApiInfo
import springfox.documentation.service.Contact
import springfox.documentation.spi.DocumentationType
import springfox.documentation.spring.web.paths.Paths
import springfox.documentation.spring.web.paths.RelativePathProvider
import springfox.documentation.spring.web.plugins.Docket
import springfox.documentation.swagger2.annotations.EnableSwagger2
import {{javaxPackage}}.servlet.ServletContext


{{>generatedAnnotation}}
@Configuration
@EnableSwagger2
class SpringFoxConfiguration {

    fun apiInfo(): ApiInfo {
        return ApiInfoBuilder()
            .title("{{appName}}")
            .description("{{{appDescription}}}")
            .license("{{licenseInfo}}")
            .licenseUrl("{{licenseUrl}}")
            .termsOfServiceUrl("{{infoUrl}}")
            .version("{{appVersion}}")
            .contact(Contact("", "", "{{infoEmail}}"))
            .build()
    }

    @Bean
{{=<% %>=}}
    fun customImplementation(servletContext: ServletContext, @Value("\${openapi.<%title%>.base-path:<%>defaultBasePath%>}") basePath: String): Docket {
<%={{ }}=%>
        return Docket(DocumentationType.SWAGGER_2)
                .select()
                    .apis(RequestHandlerSelectors.basePackage("{{apiPackage}}"))
                    .build()
                .pathProvider(BasePathAwareRelativePathProvider(servletContext, basePath))
                .directModelSubstitute(java.time.LocalDate::class.java, java.sql.Date::class.java)
                .directModelSubstitute(java.time.OffsetDateTime::class.java, java.util.Date::class.java)
                .apiInfo(apiInfo())
    }

    class BasePathAwareRelativePathProvider(servletContext: ServletContext, private val basePath: String) :
        RelativePathProvider(servletContext) {

        override fun applicationPath(): String {
            return Paths.removeAdjacentForwardSlashes(
                UriComponentsBuilder.fromPath(super.applicationPath()).path(basePath).build().toString()
            )
        }

        override fun getOperationPath(operationPath: String): String {
            val uriComponentsBuilder = UriComponentsBuilder.fromPath("/")
            return Paths.removeAdjacentForwardSlashes(
                uriComponentsBuilder.path(operationPath.replaceFirst("^$basePath", "")).build().toString()
            )
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy