我正在开发一个具有Angular前端和RESTful Spring Boot后端的应用程序
我发现了一个来自org.openapitools的非常方便的maven插件openapi-generator-maven-plugin。通过其代码生成功能,它有助于在我们的API的前端和后端之间强制执行“契约优先”的方法。但是我们的swagger文件在requestBody和responseBody定义中使用了"oneOf“属性。我试着用它来生成Spring代码,但是生成的Java类缺少导入:
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
发布于 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、回调等
发布于 2020-10-25 17:40:56
我们已经为一些生成器添加了更好的oneOf和anyOf支持,比如java (jersey2),csharp-netcore等等。
发布于 2021-04-21 22:24:15
如果您可以修改您的swagger,则可以使用对抽象类型的引用来替换oneOf。
例如,如果你的大摇大摆看起来像这样:
components:
schemas:
'Parent':
'vehicle':
oneOf:
- type: object
properties:
'car_property':
type: string
- type: object
properties:
'truck_property':
type: string您可以这样修改它:
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规范中的语义等价性。
https://stackoverflow.com/questions/62760156
复制相似问题