标签: openapi-generator

有没有支持OpenAPI 3的生成器?

在撰写本文时,OpenAPI 3规范相对较新.我正在努力寻找支持3.0版的任何文档生成器.

有谁知道支持OpenAPI v3.0的生成器?

swagger openapi openapi-generator

9
推荐指数
1
解决办法
6928
查看次数

是否可以在 Openapi 代码生成中排除路径?

我们正在使用具有许多可选功能的大型第三方 API。有 27 个端点,我们只需要 Maven 中的几个。我们正在使用服务器端生成。

如果您感兴趣,API 位于: https: //github.com/mjeffrey/psd2 理想情况下,我们只会生成并公开我们支持的 API。

是否可以只生成 API 端点列表或排除我们不想支持的端点?

我发现有可能只生成某些模型,但这不是我们需要的。-D apis 参数似乎在源代码中被视为布尔值。

https://github.com/OpenAPITools/openapi-generator#3---用法 https://github.com/OpenAPITools/openapi-generator/blob/master/docs/customization.md#selective- Generation

我还在考虑使用预处理器,这样我们就不需要手动编辑 yaml 文件(定期更新)。对于预处理 yaml 文件有什么建议吗?

openapi-generator

9
推荐指数
1
解决办法
8120
查看次数

防止 openapi-generator 在 JavaScript/TypeScript 中重命名枚举

我们使用 openapi 生成器来生成 REST 客户端。工作得非常好,直到我们开始在UPERCASE_UNDERSCORE格式中使用枚举。它去掉了下划线。这样做的主要问题是,由于属性名称与定义不匹配,因此在 Typescript 中转换此枚举变得非常痛苦。

这是一个 YAML 示例:

  properties:
    boostId:
      type: string
      maxLength: 50
    type:
      type: string
      enum:
        - BOOST_UNIQUE_ALERT_TYPE_COUNTER
        - BOOST_UNIQUE_SOURCE_SYSTEM_COUNTER
Run Code Online (Sandbox Code Playgroud)

生产:

var BoostConfiguration;
(function (BoostConfiguration) {
    /**
     * @export
     * @enum {string}
     */
    var TypeEnum;
    (function (TypeEnum) {
        TypeEnum["UNIQUEALERTTYPECOUNTER"] = "BOOST_UNIQUE_ALERT_TYPE_COUNTER";
        TypeEnum["UNIQUESOURCESYSTEMCOUNTER"] = "BOOST_UNIQUE_SOURCE_SYSTEM_COUNTER";
    })(TypeEnum = BoostConfiguration.TypeEnum || (BoostConfiguration.TypeEnum = {}));
})(BoostConfiguration = exports.BoostConfiguration || (exports.BoostConfiguration = {}));
Run Code Online (Sandbox Code Playgroud)

由于某种原因,它删除了“BOOST”,并删除了下划线。我已经尝试过enumPropertyNaming=originalmodelPropertyNaming=original,似乎都没有改变任何东西(在枚举中)。这是我们的生成器脚本:

openapi-generator generate -i api/socosApi.yaml -g typescript-axios -o generated-sources/api --additional-properties=enumPropertyNaming=original,modelPropertyNaming=original
Run Code Online (Sandbox Code Playgroud)

typescript openapi-generator

9
推荐指数
1
解决办法
7308
查看次数

为什么 openapi-generator 使用不存在的导入

我正在使用openapi-codegen version 4.2.2openapi specification 3.0.0从 yaml 文件生成一个 java 服务器 API,如下所示:

openapi-generator generate -i test.yaml -g spring -o /tmp/springTest

我遇到的问题是,生成的代码试图导入一个不存在的类。API 应该接受一个 pet 类型的对象并返回相同的 pet。宠物应该是猫、狗或蜥蜴。我使用了 openapi 规范中的继承示例,并从中构建了以下 yaml 文件:

openapi: 3.0.0
info:
  version: 1.0.0
  title: Three Pets
  termsOfService: http://swagger.io/terms
tags:
  - name: test
paths:
  /echoPet:
    post:
      tags:
        - test
      summary: Return input
      description: Send pet get pet
      operationId: echoPet
      parameters:
        - name: pet
          in: query
          schema:
            oneOf:
              - $ref: '#/components/schemas/Cat'
              - $ref: '#/components/schemas/Dog'
              - $ref: '#/components/schemas/Lizard'
      responses:
        "200": …
Run Code Online (Sandbox Code Playgroud)

java spring swagger openapi openapi-generator

9
推荐指数
1
解决办法
3408
查看次数

openapi springboot 生成器 jackson 没有从字符串值反序列化的字符串参数构造函数/工厂方法

我正在使用OpenApi SpringBoot生成器生成控制器接口和模型。这将创建具有JsonNullable<String>可空字段的模型类。但是,我收到一个Jackson类型定义错误,而POST请求是在可空字段中存在值的情况下发送的。

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.openapitools.jackson.nullable.JsonNullable` (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value ('TG')
 at [Source: (PushbackInputStream); line: 3, column: 19] (through reference chain: com.example.rest.CreateRequest["displayName"])
    at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:67) ~[jackson-databind-2.9.7.jar:2.9.7]
    at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1452) ~[jackson-databind-2.9.7.jar:2.9.7]
    at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1028) ~[jackson-databind-2.9.7.jar:2.9.7]
    at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:371) ~[jackson-databind-2.9.7.jar:2.9.7]
    at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:323) ~[jackson-databind-2.9.7.jar:2.9.7]
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1373) ~[jackson-databind-2.9.7.jar:2.9.7]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:171) ~[jackson-databind-2.9.7.jar:2.9.7]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:161) ~[jackson-databind-2.9.7.jar:2.9.7]
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:127) ~[jackson-databind-2.9.7.jar:2.9.7]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:369) ~[jackson-databind-2.9.7.jar:2.9.7]
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159) ~[jackson-databind-2.9.7.jar:2.9.7]
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013) ~[jackson-databind-2.9.7.jar:2.9.7]
    at …
Run Code Online (Sandbox Code Playgroud)

java nullable jackson spring-boot openapi-generator

9
推荐指数
3
解决办法
4966
查看次数

如何在 OpenAPI 3.0 中定义字节数组

我正在将我的 API 从 Swagger 2.0 迁移到 OpenAPI 3.0。在 DTO 中,我有一个指定为字节数组的字段。DTO 的 Swagger 定义:

Job:
   type: object
   properties:
       body:
         type: string
         format: binary
Run Code Online (Sandbox Code Playgroud)

使用上面的定义,swagger 代码生成器生成一个接受byte[]数组作为主体字段的对象new Job().setBody(new byte[1])

将 API 定义转换为 OpenAPI 后,该对象的定义保持不变,但 openapi 代码生成器现在需要org.springframework.core.io.Resource而不是byte[]( new Job().setBody(org.springframework.core.io.Resource))。在我的代码中有一些地方我必须序列化 Job 对象,但它不再可能,因为Resource没有实现可序列化。

作为一种解决方法,我将类型更改为object

Job:
   type: object
   properties:
       body:
         type: object
Run Code Online (Sandbox Code Playgroud)

现在我必须将身体投射到String然后转换到byte[]任何地方,我宁愿byte[]像以前一样拥有类型。

如何指定类型为byte[]使用 OpenAPI 3.0?

java spring openapi openapi-generator

9
推荐指数
1
解决办法
5654
查看次数

如何通过企业代理使用 OpenAPI 生成器?

我正在尝试使用OpenAPI 生成器根据openapi: "3.0.2"json 配置自动生成 C# 客户端代码:

openapi-generator generate -i https://test.com/docs/swagger/openapi.json -g csharp-netcore -c open-api-config.json -o DataLakeOpenApiRestClient.cs
Run Code Online (Sandbox Code Playgroud)

此操作失败并出现以下错误:

[主要] 错误 io.swagger.v3.parser.util.RemoteUrl - 无法读取 java.net.ConnectException:连接超时:在 java.net.DualStackPlainSocketImpl.socketConnect 处连接 java.net.DualStackPlainSocketImpl.connect0(本机方法) (未知来源) 在 java.net.AbstractPlainSocketImpl.doConnect(未知来源) 在 java.net.AbstractPlainSocketImpl.connectToAddress(未知来源) 在 java.net.AbstractPlainSocketImpl.connect(未知来源) 在 java.net.PlainSocketImpl.connect(未知来源)源)在 java.net.SocksSocketImpl.connect(未知源) 在 java.net.Socket.connect(未知源) 在 sun.security.ssl.SSLSocketImpl.connect(未知源) 在 sun.security.ssl.BaseSSLSocketImpl.connect (未知来源) 在sun.net.NetworkClient.doConnect(未知来源) 在sun.net.www.http.HttpClient.openServer(未知来源) 在sun.net.www.http.HttpClient.openServer(未知来源) 在sun .net.www.protocol.https.HttpsClient.(未知来源) 在sun.net.www.protocol.https.HttpsClient.New(未知来源) 在sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(未知来源) )在sun.net.www.protocol.http.HttpURLConnection.plainConnect0(未知来源)在sun.net.www.protocol.http.HttpURLConnection.plainConnect(未知来源)在sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection。连接(未知来源)在sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(未知来源)在io.swagger.v3.parser.util.RemoteUrl.urlToString(RemoteUrl.java:147)在io.swagger.v3 .parser.OpenAPIV3Parser.readWithInfo(OpenAPIV3Parser.java:123) 在 io.swagger.v3.parser.OpenAPIV3Parser.readLocation(OpenAPIV3Parser.java:45) 在 io.swagger.parser.OpenAPIParser.readLocation(OpenAPIParser.java:16) 在org.openapitools.codegen.config.CodegenConfigurator.toClientOptInput(CodegenConfigurator.java:586) 在 org.openapitools.codegen.cmd.Generate.run(Generate.java:395) 在 org.openapitools.codegen.OpenAPIGenerator.main(OpenAPIGenerator.爪哇:60)

但是,如果我下载 json 文件并使用本地文件输入运行,则它可以正常工作:

openapi-generator generate -i open-api-offline-file.json -g csharp-netcore -c open-api-config.json -o DataLakeOpenApiRestClient.cs
Run Code Online (Sandbox Code Playgroud)

我在没有公司代理的计算机上对此进行了测试,它工作正常,所以我的主要怀疑是代理。

我已经设置 …

c# proxy openapi-generator

8
推荐指数
1
解决办法
7455
查看次数

openapi 3.0 有效的最小值和最大值

我的 openapi 合约中有以下模式定义来表示commission amount

commissionAmount:
  type: number
  minimum: -99999.99
  maximum: 99999.99
Run Code Online (Sandbox Code Playgroud)

生成的代码:

@Valid
@DecimalMin("-99999.99") @DecimalMax("99999.99") 
public BigDecimal getCommissionAmount() {
  return commAmt;
}
Run Code Online (Sandbox Code Playgroud)

生成的代码很好并且符合预期。我只是想知道这些-99999.99以及和99999.99的有效值。minimummaximum

提出这个问题的原因是它没有检查小数部分的限制。例如,我期望12345.678is invalid ,12345.67is valid 。但它将两者标记为有效。

I read@Digits用于检查整数和小数部分的位数限制。我如何告诉也openapi-generator-maven-plugin进行注释?Digits

预期生成的代码:

@Valid
@Digits(integer = 5, fraction = 2)
@DecimalMin("-99999.99") @DecimalMax("99999.99") 
public BigDecimal getCommissionAmount() {
  return commAmt;
}
Run Code Online (Sandbox Code Playgroud)

java codegen openapi openapi-generator

8
推荐指数
1
解决办法
2万
查看次数

有没有办法使用对象引用从 Postgres 生成 OpenAPI/Swagger 定义?

我有一个使用supabase/postgres(t) 的rest api,它生成它自己的OpenAPI/Swagger 定义。问题是这仅包含 id 字段,但不包含对其他表的实际引用。

因此,当使用 openapi-generator 生成客户端时,类仅包含外键,而不包含实际的对象引用。

有没有办法生成带有引用的 openapi 定义,以便我可以带有引用生成我的类?

{
  "swagger": "2.0",
  "info": {
    "description": "standard public schema",
    "title": "PostgREST API",
    "version": "9.0.0.20220211 (pre-release) (dcf7ade)"
  },
  "host": "localhost:3000",
  "basePath": "/",
  "schemes": [
    "http"
  ],
  "consumes": [
    "application/json",
    "application/vnd.pgrst.object+json",
    "text/csv"
  ],
  "produces": [
    "application/json",
    "application/vnd.pgrst.object+json",
    "text/csv"
  ],
  "paths": {
    "/": {
      "get": {
        "tags": [
          "Introspection"
        ],
        "summary": "OpenAPI description (this document)",
        "produces": [
          "application/openapi+json",
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/hallo": …
Run Code Online (Sandbox Code Playgroud)

postgresql swagger postgrest openapi-generator supabase

8
推荐指数
0
解决办法
1612
查看次数

为 Spring 服务器和客户端生成 OAS 3 代码

我想构建一个 Maven 模块,使用 来openapi-generator-maven-plugin从两个 openapi 3 规范生成服务器代码和客户端代码。我希望服务器代码使用 Spring boot,因此我有以下设置:

<generatorName>spring</generatorName>
<library>spring-boot</library>
Run Code Online (Sandbox Code Playgroud)

这工作正常,我需要io.swagger.core.v3:swagger-annotationsOAS jakarta.validation:jakarta.validation-api3 注释和验证。

但是,对于客户端代码,我想使用WebClientSpring,我能找到的唯一设置是:

<generatorName>java</generatorName>
<library>webclient</library>
Run Code Online (Sandbox Code Playgroud)

客户端代码生成,但问题是,它需要较旧的io.swagger:swagger-annotationsjavax.validation:validation-api.

我想避免拥有不同的库集。是否有使用同一组注释和验证库的服务器和客户端代码生成设置?最好同时使用io.swagger.core.v3:swagger-annotationsjakarta.validation:jakarta.validation-api

java spring swagger openapi openapi-generator

8
推荐指数
0
解决办法
1232
查看次数