java 使用openAPI 3.0扩展而不使用鉴别器

mec1mxoz  于 2023-05-27  发布在  Java
关注(0)|答案(1)|浏览(159)

有没有可能在不使用鉴别器的情况下由openAPI生成这个?原因是我在让Jackson序列化一个没有discriminaotry值的json时遇到了很多麻烦。因此,我需要一个解决方案,通过一个简单的类BaseClass,我可以手动指定类型(我事先知道)

public abstract BaseClass{}

public Employee extends BaseClass {...}

下面的代码可以工作,但它使用了discriminator,Jackson一直在抛出未找到的属性:

components:
  schemas:
    BaseClass:
      type: object
      required:
        - entityType
      properties:
        entityType:
          type: string
          enum:
            - Employee
      discriminator:
        propertyName: entityType

Employee:
  allOf:
    - $ref: "#/components/schemas/BaseClass"
  properties:
    anotherThing:
      type: string

或者openAPI有没有一种方法来扩展一个在类路径中定义的类?比如我可以在src/java中手动定义BaseClass,然后让OpenAPI生成Employee extends BaseClass

hlswsv35

hlswsv351#

OpenAPI规范本身并不处理或了解类型、超类型、子类型、接口或继承。一切都是用于描述请求和响应有效负载的JSON Schema约束语言与类型化或非类型化代码生成目标语言之间的Map。您可以使用allOf进行原始合成(oneOfanyOfnot很难进行代码生成)。如果使用OpenAPI v3.1,您可能会从使用简单if/then/else结构的模式中获得OK结果-您可以通过使用const条件的if模式来复制discriminator的行为。
这完全取决于您正在使用的代码生成工具及其AST计算器或模板的复杂程度。

相关问题