我正在开发一个具有Angular前端和RESTful Spring Boot Backend的应用程序
我从org.openapitools.找到了这个非常方便的maven插件openapi生成器maven插件凭借其代码生成功能,它有助于在我们的应用编程接口的前端和后端之间实施“合同优先”的方法。但是我们的swagger文件在请求体和响应体定义中使用了“oneOf”属性。我试图从中生成Spring代码,但是生成的Java类缺少导入:
import com.pack.api.dto.OneOfLatteCoffeAmericanoCoffe;
import com.pack.api.dto.UNKNOWN_BASE_TYPE;
有没有办法将插件配置为与Swagger的oneOf属性一起工作?我用的是Spring靴2.3。1、Swagger 3.0和Openapi生成器maven插件4.3
我们已经为一些生成器添加了更好的oneOf和anyOf支持,如java(jersey2)、cshing-netcore等。请用最新的大师试一试。快照版本可以在项目的README:https://github.com/OpenAPITools/openapi-generator/中找到
如果您可以修改您的招摇过市,您可以将中的一个替换为对抽象类型的引用。
例如,如果您的昂首阔步看起来像这样:
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规范中是否语义等价。
目前,openapi生成器不支持oneOf
。这是OpenAPI v3新引入的功能(仅供参考,只有v2及以下被称为“斯瓦格”,然后它被重命名为OpenAPI)。有各种各样的生成器(Java,Spring,许多其他语言)。我已经看到,在这一年中已经做出了贡献,以启用oneOf
支持。
总而言之,看起来您还需要再等一会儿,直到您可以使用Spring生成器利用OpenAPI v3规范的此功能。
编辑:它也列在“短期路线图”上:
OAS3。0功能支持:anyOf、oneOf、回调等
我的目标是使用OpenAPI3.0生成Spring Boot REST客户端。 我希望首先生成API的OpenAPI规范文件(springdoc-openapi-maven-plugin),然后使用Maven从该文件(swagger-codegen-maven-plugin)生成客户机代码。 我的问题是swagger-codegen-maven-plugin在springdoc-openapi-m
我定义OpenAPI 3.0文档并使用OpenAPI-generator-cli-3.3.4。jar生成Java代码(DTO)。但我无法解决这个问题:
我试图在使用openapi 3规范设计的API中引入可为null的属性。其思想是始终将属性返回给客户端,无论其值是否为null。 YAML文件(我先尝试了,没有默认,结果相同): 生成Java代码: API的响应: 因此,无论属性是否为null,结果总是“present:true”。如果没有nullability,它就可以正常工作,除了从响应中删除不需要的null值。 有什么想法吗? P、 该物业
我在OpenAPI定义中使用来引用映射对象。我的OAS部分如下所示: 使用
OpenAPI3.0规范规定,没有任何类型的模式将匹配任何数据类型。 没有类型的模式匹配任何数据类型--数字、字符串、对象等等。 因此,对此进行建模的正确方法是下面的Swagger定义,其中没有属性: 但是,每个开放问题Swagger-core#3834,Java值都映射到OpenAPI类型,而不是任意类型。如上所述,这意味着这样的API返回或接受不是OpenAPI的类型是不正确的,例如、、等。
不幸的是,SpringFox还不支持OpenAPI3,而且,当我只想将最初的yaml公开为JSON时,使用基于反射的生成器似乎毫无意义。