有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我们在较新的sprindoc openapi ui中看到了同样的问题。您需要坚持使用springdoc openapi ui 1.3.9

    发电机上也存在类似问题:

    在openapi生成器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 return CheeseDTO中:

    MyDTO:
      type: object
      properties:
        cheeses:
          type: array
            items:
              $ref: '#/components/schemas/CheeseDTO'
    

    这应该正确地生成List<CheeseDTO>

    使用更新的openapi生成器maven插件5。这不再有效,因为propertyName不再受支持,并且其中一个产生了错误的List<MyDTOCheesesOneOf>继承