【问题标题】:Code generated by openapi-generator always sends empty arrays when uniqueItems = true in openapi documentation当 openapi 文档中的 uniqueItems = true 时,openapi-generator 生成的代码总是发送空数组
【发布时间】:2022-08-05 15:55:52
【问题描述】:

我使用 SpringDoc+Swagger 为它制作了一个 REST 端点和一个 open-api 文档。端点的请求主体有一个字段 - 对象集。正如我在生成的文档中看到的,它与数组相同,除了 uniqueItems 字段:

  \"fooSet\": {
    \"uniqueItems\": true,
    \"type\": \"array\",
    \"items\": {
      \"$ref\": \"#/components/schemas/Foo\"
    }
  }

前端开发人员使用 openapitools/openapi-generator-cli 使用 open-api 文档与我的端点交互。这个库强制他在这种情况下使用 JS Set。但它无法正确序列化 Set! openapi-generator-cli 为序列化生成了以下代码: JSON.stringify 为任何 Set 返回空数组:JSON stringify a Set

  1. 前端开发人员如何自定义集合序列化?当然,无需手动编辑生成的代码
  2. 如何禁用所有 Set 的 uniqueItems 而无需将所有 Set 替换为 List,或在每个 DTO 中的每个 Set 上添加注释?
  • 看起来像一个已知问题:github.com/OpenAPITools/openapi-generator/issues/11746。尝试那里的 cmets 中提到的解决方法(特别是通过类型映射将 Set 映射到 Array)。
  • 谢谢你,海伦。我认为您是对的,稍后我将尝试此解决方法。我想知道在如此受欢迎的图书馆中,如此严重的错误怎么可能存在这么久

标签: swagger openapi openapi-generator springdoc openapi-generator-cli


【解决方案1】:

正如 Helen 评论的那样,可以通过 gradle 任务中的类型映射将 Set 映射到 Array 来解决问题:github.com/OpenAPITools/openapi-generator/issues/11746

我发现的另一个解决方案是在OpenApiCustomiser 中手动删除uniqueItems 标志:

override fun customise(openApi: OpenAPI) {
    openApi.components.schemas.forEach { customSchema ->
        customSchema.value.properties.values
            .forEach {
                if (it.uniqueItems == true) {
                    it.uniqueItems = null
                }
            }
    }
}

【讨论】:

    猜你喜欢
    • 2022-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2020-10-26
    • 1970-01-01
    • 2021-08-08
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多