Springdocopenapiui OpenAPI Java生成器继承
由于springdoc openapi ui版本1.4.0,我无法再管理java pojo继承。 我知道AllOf,One of的概念已经添加到1.4.0中,但我不知道如何让它工作
我有一个简单的pojo,其中包含一个X列表(X是抽象的)。有两种可能的实现。使用类X的属性确定正确的实现
**代码:(类名已重命名)**
两种版本的CheeseDTO YAML:
CheeseDTO:
type: object
properties:
cheeseType:
type: string
discriminator:
propertyName: cheeseType
使用springdoc openapi ui1.3.9,我的yaml生成如下:
MyDTO:
type: object
properties:
cheeses:
type: array
items:
$ref: '#/components/schemas/CheeseDTO'
通过openopenapi生成器maven插件4.3.0生成DTO
private List<CheeseDTO> cheeses = null;
使用springdoc openapi ui1.5.4,我的yaml生成如下:
MyDTO:
type: object
properties:
cheeses:
type: array
items:
oneOf:
- $ref: '#/components/schemas/SoftCheeseDTO'
- $ref: '#/components/schemas/HardCheeseDTO'
通过openopenapi生成器maven插件4.3.0生成DTO(这是我的问题MyDTOCheesesOneOf,而不是CheeseDTO)
private List<MyDTOCheesesOneOf> cheeses = null;
招摇过市3注释:
@Schema(
name = "CheeseDTO",
discriminatorProperty = "cheeseType",
discriminatorMapping = {@DiscriminatorMapping(value = "Brie", schema = SoftCheeseDTO.class),
@DiscriminatorMapping(value = "Banon", schema = SoftCheeseDTO.class),
@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生成器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生成List<CheeseDTO>
;1.4.0 ?
我必须更改我的招摇过市注释还是更改我的java生成器
***我尝试将生成器插件更新到最新版本,但结果相同
谢谢你的帮助 大卫
# 1 楼答案
我们在较新的sprindoc openapi ui中看到了同样的问题。您需要坚持使用springdoc openapi ui 1.3.9
发电机上也存在类似问题:
在openapi生成器maven plugin 4.3.1之前,您可以通过以下方式完成:
在API return CheeseDTO中:
这应该正确地生成
List<CheeseDTO>
使用更新的openapi生成器maven插件5。这不再有效,因为
propertyName
不再受支持,并且其中一个产生了错误的List<MyDTOCheesesOneOf>
继承