有没有人成功地使用 Swagger 代码生成器创建了一个可以在浏览器中使用的 TypeScript Fetch 客户端?我正在尝试在使用 TypeScript 的 React 应用程序中使用生成的 API 客户端。
虽然我已经成功生成了一个客户端(即 api.ts 文件),但我对它以以下导入开头的事实感到困惑:
import * as querystring from "querystring";
import * as url from "url";
import * as isomorphicFetch from "isomorphic-fetch";
import * as assign from "core-js/library/fn/object/assign";
interface Dictionary<T> { [index: string]: T; }
export interface FetchAPI { (url: string, init?: any): Promise<any>; }
...
Run Code Online (Sandbox Code Playgroud)
虽然我可以成功找到 isomorphic-fetch 和 core-js 的 TypeScript 类型(即 @types),但我找不到查询字符串和 url 的类型。结果,我得到[ts] Cannot find module...了querystring,url还有assign进口。
这个客户端实际上不是打算在浏览器中使用吗?否则,任何人都可以为我在这里可能做错的事情提供任何建议吗?
在此先感谢您的帮助!
我正在使用 swagger-codegen 生成一个 rest 客户端,但是我遇到了一个问题,我使用的服务返回一个带有继承的模型,API 模型如下所示:
public class Person
{
private List<Book> books;
...
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "typeClass")
@JsonSubTypes({ @JsonSubTypes.Type(value = Magazine.class) })
public class Book
{
//some prop
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "typeClass")
public class Magazine extends Book
{
//some prop
}
Run Code Online (Sandbox Code Playgroud)
API 模型使用 jackson 注解进行注解以处理继承。API 工作正常。当我生成客户端时,客户端模型没有jackson注解,所以当我使用生成的客户端消费API时,它总是使用Book类进行反序列化。它不会“看到” Magazine 类。我认为这是因为生成的模型没有处理继承的 jackson 注释。
如何配置 swagger-codegen 以将 jackson 注释添加到模型中。
非常感谢...
我正在尝试调整自动生成的Swagger定义中使用的模型的“ displayName”。
这只会影响Swagger名称,这意味着代码中的名称空间将保持不变,而从Swagger UI查看模型时,您会看到一个自定义名称。
当前,从代码返回的模型名称是一个命名空间,如下所示:b.c.d.e.f,我想在代码中添加一个属性,并“屏蔽” Swagger文档的名称,以便在生成文档/ Swagger定义时它将显示为CustomSwaggerName。
我有一些API(C#)使用的工具包括Swashbuckle(preferred)和SwaggerGen,但是现在,如果可能的话,我想使它在其中任何一种下工作。
我尝试使用看起来正确的属性:
[ResponseType(typeof(Company)),DisplayName("NewCompany")]
[SwaggerResponse(200,"NewCompany",typeof(object))]
Run Code Online (Sandbox Code Playgroud)
没有运气。我还浏览了SwashBuckle git存储库,希望找到一些东西。
我知道这似乎是一个奇怪的用例,但这是针对为我们的AWS API Gateway自动化编写的工具,该工具将使用Swagger定义进行一些比较。
我有一个 OpenAPI 3.0 架构 YAML 文档,它定义了一些带有所有必需参数和响应的 API 端点。
现在,我想生成一些样板服务器端代码:控制器及其方法。我的 API 将使用 ASP.NET Core 2 编写。那么,是否可以使用某种生成器,还是应该手动执行?
PS我知道我可以生成客户端代码,但我现在不需要它......
code-generation asp.net-core openapi swagger-codegen asp.net-core-2.0
我正在从招摇中生成 pojo。swagger 是由第三方提供的,无法更改。我希望将“double”字段生成为“BigDecimal”。如何自定义我的代码生成器以实现这一目标?
<plugin>
<groupId>io.swagger</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<executions>
<execution>
<id>generateSquiree</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/schema/sample.swagger.json</inputSpec>
<configOptions>
<modelPackage>${basepackage}.model</modelPackage>
<apiPackage>${basepackage}.api</apiPackage>
</configOptions>
</configuration>
</execution>
</executions>
<configuration>
<language>spring</language>
<configOptions>
<serializableModel>true</serializableModel>
<java8>false</java8>
<javaVersion>${java.version}</javaVersion>
<jdk8>true</jdk8>
<dateLibrary>joda</dateLibrary>
<useTags>true</useTags>
<sourceFolder>src/main/java</sourceFolder>
<interfaceOnly>true</interfaceOnly>
</configOptions>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
以下是需要生成为“BigDecimal”的招摇的片段
"Quantity": {
"description": "Represent a quantity",
"required": [
"Amount"
],
"type": "object",
"properties": {
"Amount": {
"format": "double",
"description": "Amount",
"type": "number"
}
}
},
Run Code Online (Sandbox Code Playgroud) 我们能够使用 openApi 文档并使用 spring swagger-codegen 生成 Java 输入类。此外,我们可以在为常见约束(如长度、强制等)生成输入时注入 javax.validation 注释。
我希望将其提升到下一个自定义级别,并能够使用与 Spring 的 @Constraint 注释连接的自定义验证注释来注释生成的输入类。这样我们就可以为我们的项目重用特定的验证。
我希望有一个开箱即用的解决方案。您使用自定义验证注释生成输入类的首选方法是什么?
java spring-validator swagger-2.0 swagger-codegen swagger-codegen-maven-plugin
我有两个 yaml 文件,customer.yaml 和 employee.yaml。如何在单个项目中从这两个 yaml 文件生成 java 代码。我正在使用 gradle,我知道单个 yaml 的任务规范,但是如何指定多个 yaml。我应该在单个 openApiGenerator 下指定多个 inputSpec 吗?如果是,那么这样做的确切语法是什么。下面是我在 build.gradle 文件中的 openApiGenerator 任务。
``
openApiGenerate {
generatorName = "spring"
apiPackage = "com.xxx.generated.controller"
modelPackage = "com.xxx.generated.model"
inputSpec = "$rootDir//schema/employee.yaml".toString()
outputDir = "$rootDir/generated".toString()
configOptions = [
dateLibrary: "java8"
]
systemProperties = [
invoker : "false",
generateSupportingFiles: "true"
]
additionalProperties = [
interfaceOnly : "true",
]
}
``
Run Code Online (Sandbox Code Playgroud)
我听说过 openApiGenerators 任务,它列出了通过 Open API Generators 可用的生成器,但找不到使用它的方法。
我有一个 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")
}
}
Run Code Online (Sandbox Code Playgroud)
可能io.swagger.codegen.v3:swagger-codegen:3.0.16无法识别 OpenAPI 3.0?
Swagger Core v3 项目似乎专注于从代码(而不是来自规范的代码)生成 YAML/JSON 规范:https …
我正在尝试使用Swagger Codegen » 2.2.1生成一些 Web 服务定义
所有配置都在工作,并且我的.yaml定义正确生成了类。
为什么该属性
basePath被忽略?
我@RestController只使用paths定义生成:
https://springboot-base-save-return.appdes.xnet/saveBackendReturn
Run Code Online (Sandbox Code Playgroud)
预期(使用basePath和paths定义):
https://springboot-base-save-return.appdes.xnet/v1/saveBackendReturn
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我忘记了什么吗?
我的.yaml合同:
swagger: '2.0'
info:
description: My Project
version: 1.0.0
title: Save Backend Return
host: springboot-base-save-return.appdes.xnet
basePath: /v1
tags:
- name: saveBackendReturn
description: Save Backend Return
schemes:
- https
paths:
/saveBackendReturn:
post:
tags:
- saveBackendReturn
summary: Save Backend Return
description: My Project
operationId: saveBackendReturn
consumes:
- application/json
produces:
- application/json
parameters:
- …Run Code Online (Sandbox Code Playgroud) 在使用 Spring Boot 的 Maven 项目中,有多个 OpenAPI 3.0 规范文件。一个规范定义了所有 HTTP 错误 (errors.yml),并且 error.yml 的组件在其他规范中引用。我想生成一个输出规范,其中包含 error.yml 的所有组件。
输入规格:
schema:
$ref: "errors.yml#/components/schemas/Error"
Run Code Online (Sandbox Code Playgroud)
期望的输出规格:
schema:
$ref: "#/components/schemas/Error"
...
Error:
...
Run Code Online (Sandbox Code Playgroud)
我可以使用 swagger-codegen-cli 来做到这一点:
java -Dfile.encoding=UTF-8 -jar swagger-codegen-cli-3.0.33.jar generate -l openapi-yaml -i search-api-contract/target/expert_api.yml -o . -DoutputFile=search-api-contract/target/expert_api.yml
Run Code Online (Sandbox Code Playgroud)
如何使用 Maven pom.xml 生成一份规范?
swagger-codegen ×10
java ×5
openapi ×5
swagger ×5
gradle ×2
rest ×2
swagger-codegen-maven-plugin ×2
asp.net-core ×1
c# ×1
jackson ×1
maven ×1
npm ×1
spring ×1
swagger-2.0 ×1
swagger-ui ×1
swashbuckle ×1
typescript ×1
yaml ×1