如何让OpenAPI生成未被引用的DTO类?以BDto未生成为例
解决OpenAPI生成未引用DTO的问题
你的问题是OpenAPI生成器仅会生成被接口直接/间接引用的DTO,像BDto这种继承了ADto但未被任何接口直接引用的类就不会被生成,以下是几种可行的解决办法:
方法1:利用Discriminator映射(适配继承场景)
你的ADto已经定义了discriminator字段,直接把BDto添加到该字段的mapping中,生成器会自动识别它是ADto的子类,即便没有被接口直接引用也会生成对应的代码。修改后的ADto配置如下:
ADto: type: object properties: id: type: integer format: int64 discriminator: type: string discriminator: propertyName: discriminator mapping: bDto: '#/components/schemas/BDto'
方法2:修改生成器全局配置
如果使用的是OpenAPI Generator,可以在生成命令里添加--generate-all-schemas参数,或者在构建插件配置中设置generateAllSchemas=true,以Maven插件为例:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>对应版本号</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec> <generatorName>java</generatorName> <generateAllSchemas>true</generateAllSchemas> </configuration> </execution> </executions> </plugin>
这个配置会强制生成components/schemas下定义的所有DTO,无论是否被接口引用。
方法3:给未引用Schema添加扩展标记
部分生成器支持通过扩展字段强制生成未引用的Schema,比如OpenAPI Generator可以给BDto添加x-codegen-ignore: false标记:
BDto: x-codegen-ignore: false type: object allOf: - $ref: '#/components/schemas/ADto' - type: object properties: value: type: number format: double
结合你的继承场景,方法1是最贴合规范的解决方案,既能明确类的继承关系,又能让生成器正确识别并生成子类DTO。
内容的提问来源于stack exchange,提问作者user1552545
相关产品推荐
相关产品推荐

