I'm trying to generate interfaces from Open-API specification and I have a Gradle plugin:
implementation(
"org.springdoc:springdoc-openapi-ui:1.5.12",
"org.openapitools:openapi-generator-gradle-plugin:5.3.0"
)
def apiFile = "$rootDir/src/main/resources/openapi/api.yml"
task buildOpenApi(type: GenerateTask) {
generatorName = "spring"
inputSpec = apiFile
outputDir = "$buildDir/generated"
groupId = "$project.group"
id = "$project.name-java-client"
version = "$project.version"
apiPackage = "com.example.my.api"
modelPackage = "com.example.my.model"
configOptions = [
interfaceOnly: "true",
openApiNullable: "false",
skipDefaultInterface: "true"
]
globalProperties = [
apis: "",
models: ""
]
enablePostProcessFile = true
skipOverwrite = false
}
compileJava.dependsOn(buildOpenApi)
sourceSets.main.java.srcDirs = ['build/generated/src','src/main/java']
And have an api.yml
file that is located in src/main/resources/openapi/api.yml
. When I run ./gradlew clean compileJava
, it generates me correct interfaces to the build directory, so I can implement them. But when I launch my application and go to http://localhost:8080/swagger-ui.html
I see swagger automatically generated from my controller classes, but not from api.yml
file - I mean, it doesn't have any descriptions, examples and so on
How to make swagger built from my api.yml file, not from controller source code?
The correct way is not to expect swagger from implemented interfaces, but build it from api.yml
file. This config in application.yml
helped me:
springdoc:
api-docs:
enabled: false
path: /api-docs
swagger-ui:
disable-swagger-default-url: true
url: /api.yml
path: /api-docs
Now swagger available at localhost:8080/api-docs