我们的项目为单个 API 使用多个 swagger 文件,但看起来 swagger-codegen 只接受一个。在这种情况下,我们如何使用 swagger-codegen 生成代码?
我有一个 Angular 4 应用程序,我正在将其升级到 Angular 5。
我收到以下错误。
src/app/application/services/generated/variables.ts(1,10) 中的错误:错误 TS2305:模块 '"..../node_modules/@angular/core/core"' 没有导出成员 'OpaqueToken'。
代码片段是:
import { OpaqueToken } from '@angular/core';
export const BASE_PATH = new OpaqueToken('basePath');
export const COLLECTION_FORMATS = {
'csv': ',',
'tsv': ' ',
'ssv': ' ',
'pipes': '|'
}
Run Code Online (Sandbox Code Playgroud)
此代码由swagger editor生成。
我可以使用Swashbuckle在我的web api中集成Swagge UI.我也想探索swagger codegen功能.有人可以帮忙 - 我如何将swagger codegen集成到我的web api项目中?或者我需要下载任何工具吗?我希望它能够托管codegen并传递json/raml表单规范以在.net核心中生成客户端.
我无法在上面找到足够的文档.
编辑:我想知道如何在WEBAPI中托管codegen.
谢谢!
我有这个 json 文件,我一直在尝试通过 swagger codegen 创建模型和 API 代码。这并不是很有效,因为它会引发错误。
Exception in thread "main" java.lang.RuntimeException: missing swagger input or config!
at io.swagger.codegen.DefaultGenerator.generate(DefaultGenerator.java:735)
at io.swagger.codegen.cmd.Generate.run(Generate.java:285)
at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:35)
Run Code Online (Sandbox Code Playgroud)
swagger 文档版本是 1.2。我正在使用 swagger-codegen 2.4.0 版。
java -jar modules\swagger-codegen-cli\target\swagger-codegen-cli.jar generate -i ./json/docs.json -l python -o C:/Users/sk/projects/generated-sdk
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用swagger-codegen生成的代码来使用我的REST服务,这是在我的swagger.json中定义的(由服务器端由springfox 2.9.0提供)
我正在生成api,模型和支持文件.
但每次我尝试使用GET api时,都会发生错误:
avax.ws.rs.client.ResponseProcessingException: Problem with reading the data, class xxx.xxx.generatedmodels.MyEntity, ContentType: application/json;charset=UTF-8.
....
Caused by: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "@id" (Class xxx.xxx.generatedmodels.MyEntity), not marked as ignorable
我的猜测是生成的Model类需要类注释@JsonIdentityInfo(generator = JSOGGenerator.class),就像它们在服务器端模型上一样.(也许也许@JsonIgnoreProperties(ignoreUnknown = true)?)
这个假设是否正确?
如果是,那么有没有办法配置swagger-codegen在每个模型上添加这个注释?
如果不是,我该怎么办才能让ApiClient反序列化收到的实体?
我的swagger-codegen配置如下所示:
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>https://example.com/v2/api-docs</inputSpec>
<language>java</language>
<generateApis>true</generateApis>
<generateModels>true</generateModels>
<generateSupportingFiles>true</generateSupportingFiles>
<generateModelDocumentation>false</generateModelDocumentation>
<generateModelTests>false</generateModelTests>
<modelPackage>xxx.xxx.generatedmodels</modelPackage>
<apiPackage>xxx.xxx.generatedapi</apiPackage>
<invokerPackage>xxx.xxx.generatedinvoker</invokerPackage>
<configOptions>
<dateLibrary>java8</dateLibrary>
<sourceFolder>src/main/java</sourceFolder>
<java8>true</java8>
</configOptions>
<library>jersey2</library>
<output>../generated-client</output>
<groupId>xxx.xxx</groupId>
<artifactId>generatedapiclient</artifactId>
<artifactVersion>1.0.0</artifactVersion>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
响应看起来像这样(严重缩短.有许多对象属性也有"@id".这个例子匹配swagger.json进一步向下): …
您如何为每个子类设置默认鉴别器?
例如,采用以下模式:
components:
schemas:
Pet:
type: object
required:
- petType
properties:
petType:
type: string
discriminator:
propertyName: petType
Cat:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Cat`
properties:
name:
type: string
Dog:
allOf:
- $ref: '#/components/schemas/Pet'
- type: object
# all other properties specific to a `Dog`
properties:
bark:
type: string
Run Code Online (Sandbox Code Playgroud)
上述模式的代码生成器将创建一个客户端,其中的petType值必须由程序员显式设置。为什么不能默认设置Cat对象?petTypeCat
我尝试使用defaultvalue 让它工作。但是,生成的代码包含隐藏的属性(子级和父级上的相同属性)。
components:
schemas:
Pet:
type: object
required:
- petType
properties:
petType:
type: string …Run Code Online (Sandbox Code Playgroud) polymorphism swagger openapi swagger-codegen openapi-generator
在设计 API 时,我定义了一个UserGeo包含两个字段的模型 - domain(字符串数组) 和country(字符串数组)。
[]如果没有为 提供值,则应在请求正文中使用空列表domain。但是在将default属性定义为[]生成Spring代码时,不会分配空 ArrayList<> 又名[]。
附上代码示例:
招摇定义:
definitions:
UserGeo:
type: "object"
properties:
country:
type: "array"
items:
type: "string"
domain:
type: "array"
items:
type: "string"
default: []
Run Code Online (Sandbox Code Playgroud)
这不会将域值默认为空列表,请检查生成的 Spring/Java 代码:
.
.
public class Classification {
@JsonProperty("country")
@Valid
private List<String> country = null;
@JsonProperty("domain")
@Valid
private List<String> domain = null;
.
.
Run Code Online (Sandbox Code Playgroud)
然而,当我将域字段定义为required甚至没有使用默认值定义它时,生成的代码会分配一个空列表作为domain.
definitions:
UserGeo:
type: …Run Code Online (Sandbox Code Playgroud) 我在 gradle 中使用 swagger codegen cli 工具(版本 3.0.25)生成一个 java 客户端:
task doCodeGenSdk(type: JavaExec) {
main = "io.swagger.codegen.v3.Codegen"
classpath = configurations.codeGenCli
inputs.files file("${swaggerSpecDir}/*.json")
outputs.dir file("${codeGenDirSdk}")
args = ["generate", "--lang", "java", "--input-spec", "${swaggerSpecFile}",
"--config", "${swaggerConfig}",
"--template-dir", "${swaggerTemplateDir}",
"--output", "${codeGenDirSdk}"]
systemProperty "apiTests", "false"
systemProperty "apiDocs", "false"
systemProperty "modelTests", "false"
systemProperty "modelDocs", "false"}
Run Code Online (Sandbox Code Playgroud)
swagger配置文件如下所示:
{
"library": "resttemplate",
"artifactVersion": "__VERSION__",
"artifactId": "__ARTIFACT_ID__",
"modelPackage": "com.model",
"apiPackage": "com.api",
"invokerPackage": "com.invoker",
"dateLibrary": "java8",
"apiTests": false,
"java8": true,
"serializableModel": true,
"useBeanValidation": true,
"performBeanValidation": true}
Run Code Online (Sandbox Code Playgroud)
模板目录具有以下胡子文件:
ApiClient.mustache, generatedAnnotation.mustache, licenseInfo.mustach, pojo.mustache …Run Code Online (Sandbox Code Playgroud) 我有一个带有 Spring Cloud Gateway 的微服务架构,每个微服务都有自己的 Open Api Spec。我需要将它们全部合并到 1 个开放 Api 规范( yaml 或 json )中。我不是在谈论服务多个链接的单个 swagger UI。我确实需要合并规范,因为规范的使用者需要一个 json 文件。此文件由 Atlassian 的 Open Api Validator 使用。
我需要使用带有 Jakarta 包的 swagger codegen gradle 插件生成 spring 控制器源代码,但我在配置中看不到这样做的选项
我尝试使用以下选项来生成招摇代码:
additionalProperties = [
"errorOnUnknownEnum": true,
"dateLibrary": "java8",
"hideGenerationTimestamp": true,
"modelPackage": "com.delphix.api.gw.model${version}",
"apiPackage": "com.delphix.api.gw.api${version}",
"interfaceOnly": true,
"packageName": "api",
"useTags": true,
"useJakartaEe" : true,
"useSpringBoot3" : true,
"generateSupportingFiles" : false,
"java11" : true,
]
Run Code Online (Sandbox Code Playgroud) swagger-codegen ×10
swagger ×6
openapi ×3
java ×2
.net-core ×1
angular ×1
angular5 ×1
api ×1
c# ×1
gradle ×1
jsog ×1
polymorphism ×1
python ×1
spring-boot ×1
springdoc ×1
swagger-2.0 ×1