问题标签 [openapi-generator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4318 浏览

java - 为什么鉴别器属性被序列化两次?

我在组件模式中使用 OpenAPI 3.0 继承,并且我有由 openapi-generator (使用 Jackson)生成的(Java)类。

为什么鉴别器属性在生成的 JSON 中被序列化两次?

这是一个 JHipster API-First 项目,它应该使用 openapi-generator 来生成 Java 模型(带有 Jackson 注释的 POJO)和 API 控制器(带有 Spring 的 @Api 注释的接口)。

通过遵循 OpenAPI 3.x 文档/示例,似乎使用 as 的属性discriminator也必须在properties模式列表中指定。

这样,生成的 Java 类似乎与 Jackson 使用注释的多态类型处理指南不同(此处),其中用作鉴别器的属性不得出现在类中。相反,生成的代码还包含此属性作为具有 getter/setter 的类属性。这会导致 JSON 输出包含该属性两次,如下所示。

我还尝试从 OpenAPIproperties列表中删除该属性,保留完整的discriminator部分;这样生成的代码符合杰克逊的指导方针,并且序列化工作得很好。另一方面,我在反序列化过程中遇到错误,因为在目标类中找不到(删除的)属性。

遵循 OpenAPI 3.x 文档指南:

生成的类:

JSON 包含该属性两次

properties从列表中删除鉴别器属性:

生成的没有type属性的类:

JSON 现在是正确的:

我希望通过遵循 OpenAPI 3.x 指南,生成的类能够正确序列化/反序列化。

(边注)

在反序列化过程中,使用上述方法,您可能会收到以下错误:

要解决此问题,您需要配置 Jackson ObjectMapper 对象以忽略这种情况。

0 投票
1 回答
1200 浏览

typescript - OpenAPI 生成器 typescript-axios 更改属性名称,并且不能将日期作为字符串传递

我正在使用开放 api 生成器工具进行代码生成以生成typescript-axios客户端,但不幸的是,我遇到了一些问题。

  1. 我们从被调用的开放 api 文档中有一个属性long。但是,它生成的接口会更改_long不正确的属性。我在 mustache 模板中找不到执行此操作的任何位置,因此它必须在 CLI 层中发生。可以防止这种行为吗?

Swagger 属性定义:

Codegen接口属性输出:

  1. 日期作为字符串传递给 API,并在开放的 api 文档中如此定义,但似乎当它们具有date-time格式时,接口表示它需要一个Date对象。这在我们的情况下并不理想,但这似乎又发生在 CLI 级别,因此我无法通过修改 mustache 模板来防止这种行为。

Swagger 属性定义:

Codegen接口属性输出:

提前感谢您的帮助!

0 投票
0 回答
2878 浏览

xml - 如何从 OpenAPI 3.0 规范生成 XSD 文件?

Swagger docs中所述,我使用带有附加 xml 元数据的 OpenAPI 3.0 创建 XML API 规范。在开发阶段,我想根据 OpenAPI 3.0 规范自动测试我的端点的 XML 响应。

针对 OpenAPI 3.0 模式验证端点的 XML 响应的最佳方法是什么?通过验证,我的意思是:

  • 验证每个 XML 标签或标签的属性是否符合规范,
  • 规范要求的所有元素都存在,
  • 数据已针对响应内容架构中声明的类型成功验证。

我想这样的测试可以通过以下步骤完成:

  1. 在项目构建期间,如果该路径具有指定的application/xml内容类型并且定义了响应模式,则从 OpenAPI 规范中的每个路径的模式定义生成 XSD 文件。

  2. 在测试中,获取特定端点的响应并针对 XSD 文件进行验证。

不幸的是,目前似乎没有工具可以从 OpenAPI 规范生成 XSD 来创建上述管道。

你怎么能达到这个目标?是否可以结合使用 OpenAPI/Swagger 工具?是否有任何其他可靠的方法来验证 XML 响应而无需手动创建 XSD?

问题不是特定于编程语言的。

0 投票
1 回答
263 浏览

java - 在 OpenAPI 中启用异步服务器 API,按需为 Jersey 生成代码

我们通过 gradle(即openapi-generator-gradle-plugin)使用 OpenAPI 来生成 Jersey 资源。一般来说,这很好用。

生成的方法如下所示:

但我们也希望支持使用异步服务器 API的方法。

理论上,我们可以将所有生成的同步方法更改为异步方法,即调整模板文件api.mustache以及apiService.mustache替换Responsebyvoid并添加@Suspended final AsyncResponse asyncResponseas 第一个参数(加上添加导入等)。

但是将所有请求从同步处理转换为异步处理对我们来说是没有意义的。

所以我的问题是:我们如何实现某种“切换”以在输入文件中指示我们想要为每种方法生成(同步/异步)什么样的实现?

我正在考虑编写一个新的生成器,它从输入规范文件中读取例如一个标签,并将其放入一个布尔变量中,该变量在模板文件中进行评估。这可行吗?有没有类似的问题已经解决了?或者你对我有什么其他想法吗?

谢谢!

0 投票
1 回答
1189 浏览

openapi-generator - 无法从 openapi-generator mustache 模板引用供应商扩展

我有一个 Open API 3 规范 yaml 文件,其中包含一些 x 前缀属性。我正在尝试使用 openapi-generator-cli 生成 Angular Typescript SDK。但是,当我在模板 mustache 中引用该属性时,带有 x 前缀的属性始终为空白。

来自 yaml 的示例端点(省略了不相关的内容):

我如何在 Mustache 模板中使用它(省略不相关的内容):

(基本上我正在尝试使用 x-foo 参数作为正在生成的 SDK 中的方法名称。)

但是,生成的 SDK 会替换{{x-foo}}为空白:

这就是我调用生成器的方式(没有换行符):

如何从 openapi-generator 模板中引用供应商扩展/以 x 为前缀的 Open API 3 属性?

0 投票
1 回答
1059 浏览

java - 在 jhipster 中使用 API-First 开发生成的源代码

我正在尝试使用 openapi 生成器在 jhipster 中生成一个新服务,但是生成的源是在 builddirectory (目标)上创建的,因此对于覆盖这些源并添加我的逻辑没有用。我应该在我的过程中改变什么?

我创建了招摇代码,并按照 jhipster 文档中的建议运行生成源:https ://www.jhipster.tech/doing-api-first-development/

并运行发电机:

我期待这些类将在 SRC 文件夹下生成,以供我的实现扩展。我的理解正确吗?我应该手动将它们复制到我的源文件夹吗?谢谢。

0 投票
2 回答
14143 浏览

java - 从 OpenAPI 3 生成 Java Spring API

我尝试从 OpenAPI v3 YAML 文件生成 Spring REST 接口。构建 说:

但是输出目录中没有生成代码。

我关注了 OpenAPI 生成器 gradle plugin doc doc。

我的 build.gradle:

我的 api.yml:

api.yml 由生成器正确收集(如果文件中有任何语法错误,则构建失败)。

构建日志说:Successfully generated code to property(.... 不意味着该属性包含生成的结果吗?

摇篮版本:

编辑:

我已经检查了gradle plugin的示例,上面的代码适用于 Gradle v4,但不适用于 5。我仍在调查。

0 投票
1 回答
2887 浏览

maven - 在 OpenAPI 规范定义中使用工件版本号

我有一个使用 OpenaAPI v3 规范的 API 定义的 Maven 项目。

我使用 openapi-generator-maven-plugin 生成代码,一切正常。我还可以访问 swagger-ui 并查看和测试我的 API。

问题是我不想两次维护版本号。因此,我想在我的 api 规范中引用我的 maven pom 中的版本号,而不是复制它而冒着过时的风险。

我已经尝试过 Maven 资源过滤,这似乎有效。由于当我在规范中输入版本字段时,目标文件夹中的 yaml 文件得到了很好的替换${project.version},但是当我打开 swagger-ui 时,它会按字面意思打印“$ {project.version}”而不是实际版本。

这是我的 pom 中的插件配置:

这是我的 spec.yml:

0 投票
0 回答
494 浏览

java - 如何从 openapi 3获取 ResponseType

我们目前正在将一些旧的 rest 接口从 RAML 迁移到 OpenAPI 3。在 RAML 文件中,HTTP 删除操作的响应定义为空主体,如下所示:

这会生成带有响应类型的删除方法的 java 代码ResponseEntity<?>
使用 OpenAPI 生成具有响应类型的相同方法ResponseEntity<Void>
我们不想更改接口的实现,那么有没有办法ResponseEntity从 OpenAPI(3) 生成带通配符的泛型类型?

0 投票
0 回答
586 浏览

openapi - 使用 GIT 存储库中的文件而不是在 Open API Generator Maven 插件中

我正在使用“openapi-generator-maven-plugin”版本 4.1.1 生成模型类我目前正在使用“inputSpec”标签从 Java 项目的资源文件夹中访问 POM 中的 .yaml 文件。

我有一个场景,我需要从远程 git 存储库访问文件。有什么办法可以做到这一点?不太确定和标签,它们甚至与这样做相关吗?