java - 如何让 maven swagger codegen 插件使用继承生成 Java 类?

标签 java maven swagger swagger-codegen-maven-plugin

在我们的 swagger.yaml 文件中,我们有一个定义 Cat使用 allOf包括 Pet 的所有属性。

Cat:
  allOf:
    - $ref: '#/definitions/Pet'
    - type: object
      properties:
      # ...

期望是在生成 Java 源代码时,我们得到

public class Cat extends Pet {

这在使用 Swagger Editor 时有效。

当使用swagger-codegen-maven-plugin时没有configOptions设置后,我们得到以下结果:

public class Cat {

Cat实现所有Pet的属性本身,而不是扩展它。

你如何告诉 swagger-codegen-maven-plugin使用带有继承的 Java(即 extends )?(我们尝试了 spring 和 java 作为语言。)

这是一个示例 swagger.yaml 文件:

swagger: '2.0'

info:
  version: 1.0.0
  title: simple inheritance

tags:
  - name: "pet"

paths:
  /cat:
    put:
      tags:
        - "pet"
      operationId: "updateCat"
      consumes:
        - "application/json"
      parameters:
        - in: "body"
          name: "body"
          required: true
          schema:
            $ref: "#/definitions/Cat"
      responses:
        200:
          description: Nada

definitions:
  Pet:
    type: "object"
    required:
      - "name"
    properties:
      name:
        type: "string"
        example: "doggie"
  Cat:
    allOf:
      - $ref: '#/definitions/Pet'
      - type: object
        properties:
          huntingSkill:
            type: string
        required:
          - huntingSkill

最佳答案

正如 chiochuan 在 github 上指出的那样,解决方法是添加

   discriminator: "type"

修改父类的定义,让 Java 子类扩展它。

definitions:
  Pet:
    type: "object"
    discriminator: "type"
    required:
      - "name"
    properties:
      name:
        type: "string"
        example: "doggie"

这有点奇怪,因为 OpenAPI 规范版本 2.0 声明 discriminator Fixed Field必须引用同一架构中的属性,并且它必须是必需的属性,这两种情况都不是这样 - 但它有效,至少到目前为止是这样。 :)

关于java - 如何让 maven swagger codegen 插件使用继承生成 Java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771534/

相关文章:

java - 当文件大小发生变化时,Struts DiskFile.getInputStream() 返回 ByteArrayInputStream 和 FileArrayInputStream

java - @JoinColumnS 涉及一对一关系中的 EAGER 获取

java - 从html链接到jsp

java - 配置 Web 应用程序以在 JBoss 7 中显示索引页面(使用 Maven)

maven - Sonatype Nexus可以使用maven的本地存储库吗

java - 异常: adding a window to a container.如何解决?

java - 如何修复 IntelliJ 上未找到插件 maven-surefire-plugin >= 2.20 的错误

java - 使用 PUT 请求 Java 将文本文件上传到 Swagger

swagger - 是否可以从 ReadeMe.md 文件中的 swagger YAML 文件渲染 Swagger UI?只显示一次 UI 在 github 提交代码

python - 指定 eventlet wsgi 服务器的进程数