首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在生成Spring代码时将OpenAPI "oneOf“属性与openapi-generator-maven-plugin一起使用

如何在生成Spring代码时将OpenAPI "oneOf“属性与openapi-generator-maven-plugin一起使用
EN

Stack Overflow用户
提问于 2020-07-07 00:14:24
回答 4查看 12.7K关注 0票数 15

我正在开发一个具有Angular前端和RESTful Spring Boot后端的应用程序

我发现了一个来自org.openapitools的非常方便的maven插件openapi-generator-maven-plugin。通过其代码生成功能,它有助于在我们的API的前端和后端之间强制执行“契约优先”的方法。但是我们的swagger文件在requestBody和responseBody定义中使用了"oneOf“属性。我试着用它来生成Spring代码,但是生成的Java类缺少导入:

代码语言:javascript
复制
import com.pack.api.dto.OneOfLatteCoffeAmericanoCoffe;
import com.pack.api.dto.UNKNOWN_BASE_TYPE;

有没有办法配置这个插件来使用Swagger的oneOf属性?我是usig Spring Boot 2.3.1,Swagger 3.0和Openapi-generator-maven-plugin 4.3

EN

回答 4

Stack Overflow用户

发布于 2020-10-21 23:53:59

目前,openapi-generator不支持oneOf。这是OpenAPI v3新引入的一项功能(仅供参考,只有v2及以下版本称为"Swagger",后来被重命名为OpenAPI)。有各种各样的生成器(Java、Spring、许多其他语言)。在这一年里,我在enable oneOf support上看到了contributions have been made

总而言之,看起来您必须再等一段时间,直到您可以使用OpenAPI的v3生成器来利用Spring规范的这一特性。

编辑:它还列出了on the "short term roadmap"

OAS3.0特性支持: anyOf、oneOf、回调等

票数 12
EN

Stack Overflow用户

发布于 2020-10-25 17:40:56

我们已经为一些生成器添加了更好的oneOf和anyOf支持,比如java (jersey2),csharp-netcore等等。

票数 4
EN

Stack Overflow用户

发布于 2021-04-21 22:24:15

如果您可以修改您的swagger,则可以使用对抽象类型的引用来替换oneOf

例如,如果你的大摇大摆看起来像这样:

代码语言:javascript
复制
components:
  schemas:
    'Parent':
      'vehicle':
        oneOf:
        - type: object
          properties:
            'car_property':
              type: string
        - type: object
          properties:
            'truck_property':
              type: string

您可以这样修改它:

代码语言:javascript
复制
components:
  schemas:
    'Parent':
      'vehicle':
        $ref: '#/components/schemas/Vehicle'
    #---------------------------------------------------------------------------
    # Abstract class with discriminator 'vehicle_type'
    #---------------------------------------------------------------------------
    'Vehicle':
      type: object
      properties:
        'vehicle_type':
          type: string
          enum: [ 'CAR', 'TRUCK' ]
      discriminator:
        propertyName: vehicle_type
        mapping:
          'CAR': '#/components/schemas/Car'
          'TRUCK': '#/components/schemas/Truck'
    #---------------------------------------------------------------------------
    # Concrete classes
    #---------------------------------------------------------------------------
    'Car':
      allOf:
      - $ref: "#/components/schemas/Vehicle"
      - type: object
        properties:
          'car_property':
            type: string
    'Truck':
      allOf:
      - $ref: "#/components/schemas/Vehicle"
      - type: object
        properties:
          'truck_property':
            type: string

这种大摇大摆的修改使发电机正常工作。它处理相同的JSON对象,尽管我不能100%确定它在OpenAPI规范中的语义等价性。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62760156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档