问题
在使用ASP.NET Core的Open API Generator 6.x版中,由于未知原因,嵌套对象类型被创建为自己的类。5.x版本的openapi生成器对嵌套对象使用了相同的类。
yml规范中有这两个组件(示例repo中的event-api-v1.swagger.3.0.3.yaml)
components:
schemas:
EventIdentifier:
title: EventIdentifier
type: object
properties:
eventId:
type: string
occurrenceDate:
type: string
nullable: true
example:
eventId: 43128940213498123
occurrenceDate: 2021-05-30T15:00:00+12:00
BookingCreate:
title: BookingCreate
type: object
description: A particular person s booking for an event.
required:
- eventId
- personId
properties:
eventId:
allOf:
- $ref: #/components/schemas/EventIdentifier
description: A unique identifier for the event that the booking relates to.
personId:
type: string
nullable: false
版本5.x生成C#作为
public class BookingCreate : IEquatable<BookingCreate>
{
public EventIdentifier EventId { get; set; }
}
但是,6.x版本正在生成
public class BookingCreate : IEquatable<BookingCreate>
{
public BookingCreateEventId EventId { get; set; }
}
对于已经建立的大型项目来说,采用6.x版本的openapi生成器是一个巨大的障碍。
问题
这种行为上的改变可以通过配置或自定义模板恢复到5.x行为吗?
关于自定义模板,在检查model.mustache文件时,dataType提供的值将作为EventId属性的BookingCreateEventId/SpeakerCreateEventId提供,因此无法轻松自定义。
观察
将openapi规范更改为3.1(例如,event-api-v1.swagger.3.1.yaml)会导致EventId的类型被设置回EventIdentifier,但生成器还不支持3.1,因此所有的基元类型都被生成为对象。
代码
可以在此处找到一个小型测试项目:https://github.com/marcsstevenson/OpenApiGeneratorTesting
尝试次数
曾尝试使用openapi生成器的6.0、6.1、6.2、6.3、6.4、6.5、6.6版本,但无法复制5.x版本的代码输出