我有一个 OpenAPI 3.0 规范(采用 YAML 格式),并且想为 API 生成 Java 代码。我想将此作为自动化构建的一部分(最好使用 Gradle),以便我可以创建服务接口,并将接口的实现作为自动化过程的一部分。
这个工作示例展示了如何做到这一点,但是它使用了 Swagger 2.0 规范 YAML:https : //github.com/galovics/swagger-codegen-gradle/tree/first-server-side
我已经分叉了这个例子并添加了一个 OpenAPI 3.0 规范,但是它无法构建:https : //github.com/robjwilkins/swagger-codegen-gradle/tree/openapi_v3_test
错误是:
无法读取资源列表 com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'openapi': was expected (JSON String, Number, Array, Object or token 'null', 'true' or 'false') at [来源: (字符串)"openapi: 3.0.0
(公关显示变化: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/JSON 规范:https : //github.com/swagger-api/swagger-core
对这个问题的任何帮助将不胜感激。谢谢 :)
我现在已经开始工作了(感谢@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
真棒,这帮助我更进一步,我现在在创建 DefaultGenerator 时面临空指针问题。我使用了额外的属性。
好的,我看到了更新,我仍然收到 NullPointer,不知道为什么,我的代码和你的一样。与 4.9
我想通了,你的代码帮助了很多 :) 谢谢 :) :)
这篇文章帮助解决了我的问题。是否有禁用生成 API 测试的选项?“apiTests=false”没有像文档github.com/swagger-api/swagger-codegen 中提到的那样工作