Как использовать Swagger Codegen в Gradle для OpenAPI 3.0? - PullRequest
3 голосов
/ 23 января 2020

У меня есть OpenAPI 3.0 spe c (в формате YAML), и я хотел бы сгенерировать Java код для API. Я хочу сделать это как часть автоматической сборки (предпочтительно с использованием Gradle), чтобы я мог создать интерфейс службы и реализацию интерфейса как часть автоматизированного процесса.

В этом рабочем примере показано, как сделайте это, однако он использует спецификацию Swagger 2.0 YAML: https://github.com/galovics/swagger-codegen-gradle/tree/first-server-side

Я разветвил этот пример и добавил OpenAPI 3.0 spe c, однако затем он не может построить: https://github.com/robjwilkins/swagger-codegen-gradle/tree/openapi_v3_test

Ошибка:

не удалось прочитать список ресурсов com.faster xml .jackson.core.JsonParseException: нераспознанный токен 'openapi ': ожидал (JSON String, Number, Array, Object или token' null ',' true 'или' false ') в [Source: (String) "openapi: 3.0.0

(PR показывает изменения: https://github.com/robjwilkins/swagger-codegen-gradle/pull/1/files)

Насколько я понимаю, код, который необходимо обновить, находится в build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("io.swagger.codegen.v3:swagger-codegen:3.0.16")
    }
}

возможно io.swagger.codegen.v3:swagger-codegen:3.0.16 не не поддерживает OpenAPI 3.0?

Проект Swagger Core v3, похоже, нацелен на создание YAML / * 104 2 * spe c из кода (вместо кода из spe c): https://github.com/swagger-api/swagger-core

Любая помощь с этой проблемой будет принята. Спасибо:)

1 Ответ

2 голосов
/ 23 января 2020

Теперь у меня все работает (спасибо @Helen за помощь)

Требуются правки в build.grade.

Сначала я должен был изменить сценарии сборки, чтобы получить другую зависимость:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath('io.swagger.codegen.v3:swagger-codegen-maven-plugin:3.0.16')
    }
}

Изменение некоторых импортов:

import io.swagger.codegen.v3.CodegenConfigLoader
import io.swagger.codegen.v3.DefaultGenerator
import io.swagger.codegen.v3.ClientOptInput
import io.swagger.codegen.v3.ClientOpts
import io.swagger.v3.parser.OpenAPIV3Parser

И обновить generateServer задача:

ext.apiPackage   = 'com.example.api'
ext.modelPackage = 'com.example.model'

task generateServer {
    doLast {
        def openAPI = new OpenAPIV3Parser().read(rootProject.swaggerFile.toString(), null, null)
        def clientOpts = new ClientOptInput().openAPI(openAPI)
        def codegenConfig = CodegenConfigLoader.forName('spring')
        codegenConfig.setOutputDir(project.buildDir.toString())
        clientOpts.setConfig(codegenConfig)
        def clientOps = new ClientOpts()
        clientOps.setProperties([
                'dateLibrary'     : 'java8', // Date library to use
                'useTags'         : 'true',  // Use tags for the naming
                'interfaceOnly'   : 'true'   // Generating the Controller API interface and the models only
                'apiPackage'       : project.apiPackage,
                'modelPackage'     : project.modelPackage
        ])
        clientOpts.setOpts(clientOps)

        def generator = new DefaultGenerator().opts(clientOpts)
        generator.generate() // Executing the generation
    }
}

обновлено build.gradle здесь: https://github.com/robjwilkins/swagger-codegen-gradle/blob/openapi_v3_test/user-service-contract/build.gradle

...