1

springdoc-openapi-ui版本 1.4.0 开始,我无法再管理 java pojo 继承。我知道 AllOf, OneOf 的概念已在 1.4.0 中添加,但我不知道如何使其工作。

我有一个简单的 pojo,其中包含 X 列表(x 是抽象的)。有两种可能的实现。正确的实现取决于类 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生成 DTO

private 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", 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>

有没有办法 List<CheeseDTO> springdoc-openapi-ui > 1.4.0 生成一个?我是否必须更改我的招摇注释或更改我的 java 生成器?

**我尝试将生成器插件更新到最新版本,但结果相同

感谢您的帮助大卫

4

1 回答 1

1

我们看到与较新的 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>.

于 2021-07-29T08:00:09.060 回答