如何解决Springdoc-openapi-ui OpenAPI Java Generator 继承
从 springdoc-openapi-ui 1.4.0 版开始,我就不能再管理 java pojo 继承了。 我知道 AllOf、OneOf 的概念已在 1.4.0 中添加,但我不知道如何使其工作。
我有一个简单的 pojo,其中包含一个 X 列表(x 是抽象的)。有 2 种可能的实现。正确的实现取决于类 X 的属性。
** 代码:(类名已重命名)**
两个版本中的 CheeseDTO YAML :
CheeseDTO:
type: object
properties:
cheeseType:
type: string
discriminator:
propertyName: cheeseType
使用 springdoc-openapi-ui 1.3.9,我的 yaml 是这样生成的:
MyDTO:
type: object
properties:
cheeses:
type: array
items:
$ref: '#/components/schemas/CheeseDTO'
通过开放的openapi-generator-maven-plugin 4.3.0
生成DTOprivate List<CheeseDTO> cheeses = null;
使用 springdoc-openapi-ui 1.5.4,我的 yaml 是这样生成的:
MyDTO:
type: object
properties:
cheeses:
type: array
items:
oneOf:
- $ref: '#/components/schemas/SoftCheeseDTO'
- $ref: '#/components/schemas/HardCheeseDTO'
通过开放的 openapi-generator-maven-plugin 4.3.0 生成 DTO(这是我的问题 MyDTOCheesesOneOf 而不是 CheeseDTO)
private List<MyDTOCheesesOneOf> cheeses = null;
Swagger 3 注释:
@Schema(
name = "CheeseDTO",discriminatorProperty = "cheeseType",discriminatorMapping = {@DiscriminatorMapping(value = "Brie",schema = SoftCheeseDTO.class),@DiscriminatorMapping(value = "Banon",@DiscriminatorMapping(value = "Cheddar",schema = HardCheeseDTO.class)})
abstract CheeseDTO
private String cheeseType;
@Schema(allOf = {CheeseDTO.class})
SoftCheeseDTO extends CheeseDTO
@Schema(allOf = {CheeseDTO.class})
HardCheeseDTO extends CheeseDTO
OpenAPI Generator Maven 插件
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>4.3.0</version>
<executions>
<execution>
<id>generateWebQuoteApiClient</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>/definitions/webQuoteApi.yaml</inputSpec>
<generatorName>java</generatorName>
<generateApiDocumentation>false</generateApiDocumentation>
<configOptions>
<library>jersey2</library>
<dateLibrary>java8</dateLibrary>
<java8>true</java8>
<modelPackage>${client.package}.model</modelPackage>
<apiPackage>${client.package}.api</apiPackage>
<invokerPackage>${client.package}.api</invokerPackage>
<performBeanValidation>false</performBeanValidation>
<serializationLibrary>jackson</serializationLibrary>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
有没有办法用 springdoc-openapi-ui > 1.4.0 生成 List<CheeseDTO>
?
我是否必须更改我的 swagger 注释或更改我的 Java 生成器?
** 我尝试将生成器插件更新到最新版本,但结果相同
感谢您的帮助 大卫
解决方法
我们在较新的 sprindoc openapi ui 中看到了同样的问题。您需要坚持使用 springdoc-openapi-ui 1.3.9。
类似的问题是在发电机上:
直到 openapi-generator-maven-plugin 4.3.1 你可以这样做:
CheeseDTO:
type: object
properties:
cheeseType:
type: string
discriminator:
propertyName: cheeseType
mapping:
SOFT_CHEESE: '#/components/schemas/SoftCheeseDTO'
HARD_CHEESE: '#/components/schemas/HardCheeseDTO'
并在您的 API 中返回 CheeseDTO:
MyDTO:
type: object
properties:
cheeses:
type: array
items:
$ref: '#/components/schemas/CheeseDTO'
这应该会正确生成 List<CheeseDTO>
。
使用较新的 openapi-generator-maven-plugin 5.x,这不再起作用,因为不再支持 propertyName
并且 oneOf 产生错误的 List<MyDTOCheesesOneOf>
继承。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。