gpt4 book ai didi

spring-boot - OpenApi - 有没有办法在使用 springdoc-openapi-maven-plugin 生成的契约(Contract)中使用带有鉴别器部分的组合模式?

转载 作者:行者123 更新时间:2023-12-04 09:35:00 24 4
gpt4 key购买 nike

我有一个具有以下功能的示例 SpringBoot API:

  • 1 个 Controller ,它公开一个可通过 GET 请求调用的端点并返回一个自定义类(在我的示例中为 ContainerClass)
  • ContainerClass 包含一个属性列表
  • ParentClass 是一个抽象类,它有 2 个子类:ChildA 和 ChildB

  • 我尝试使用 从此 API 生成 OpenApi 契约(Contract)springdoc-openapi-maven-plugin .
    在我的 pom.xml 中,我有以下元素:
  • SpringBoot 版本:2.2.6
  • org.springdoc:springdoc-openapi-ui:1.4.1
  • org.springdoc:springdoc-openapi-maven-plugin:1.0

  • 这是我从中生成架构的类。
    import io.swagger.v3.oas.annotations.media.ArraySchema;
    import io.swagger.v3.oas.annotations.media.Schema;

    public class ContainerClass {

    @ArraySchema(
    arraySchema = @Schema(discriminatorProperty = "classType"),
    schema = @Schema(implementation = ParentClass.class)
    )
    public List<ParentClass> elements;

    // + Getter/Setter
    }
    @JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME,
    include = JsonTypeInfo.As.EXISTING_PROPERTY,
    property = "classType",
    defaultImpl = ParentClass.class,
    visible = true)
    @JsonSubTypes({
    @JsonSubTypes.Type(value = ChildA.class, name = "CHILD_A"),
    @JsonSubTypes.Type(value = ChildB.class, name = "CHILD_B")})
    @Schema(
    description = "Parent description",
    discriminatorProperty = "classType",
    discriminatorMapping = {
    @DiscriminatorMapping(value = "CHILD_A", schema = ChildA.class),
    @DiscriminatorMapping(value = "CHILD_B", schema = ChildB.class)
    }
    )
    public abstract class ParentClass {

    public String classType;

    // + Getter/Setter
    }
    @io.swagger.v3.oas.annotations.media.Schema(description = " Child A", allOf = ParentClass.class)
    public class ChildA extends ParentClass{
    }
    @io.swagger.v3.oas.annotations.media.Schema(description = " Child B", allOf = ParentClass.class)
    public class ChildB extends ParentClass{
    }
    当我运行 springdoc-openapi-maven-plugin 时,我得到以下合约文件。
    openapi: 3.0.1
    info:
    title: OpenAPI definition
    version: v0
    servers:
    - url: http://localhost:8080
    description: Generated server url
    paths:
    /container:
    get:
    tags:
    - hello-controller
    operationId: listElements
    responses:
    "200":
    description: OK
    content:
    '*/*':
    schema:
    $ref: '#/components/schemas/ContainerClass'
    components:
    schemas:
    ChildA:
    type: object
    description: ' Child A'
    allOf:
    - $ref: '#/components/schemas/ParentClass'
    ChildB:
    type: object
    description: ' Child B'
    allOf:
    - $ref: '#/components/schemas/ParentClass'
    ContainerClass:
    type: object
    properties:
    elements:
    type: array
    description: array schema description
    items:
    oneOf:
    - $ref: '#/components/schemas/ChildA'
    - $ref: '#/components/schemas/ChildB'
    ParentClass:
    type: object
    properties:
    classType:
    type: string
    description: Parent description
    discriminator:
    propertyName: classType
    mapping:
    CHILD_A: '#/components/schemas/ChildA'
    CHILD_B: '#/components/schemas/ChildB'
    实际上,在我的上下文中,为了与现有消费者没有任何重大变化,我需要 项目 房产在 ContainerClass 包含 的架构鉴别器 包含在 中的部分父级模式,像这样:
    ContainerClass:
    type: object
    properties:
    elements:
    type: array
    description: array schema description
    items:
    discriminator:
    propertyName: classType
    mapping:
    CHILD_A: '#/components/schemas/ChildA'
    CHILD_B: '#/components/schemas/ChildB'
    oneOf:
    - $ref: '#/components/schemas/ChildA'
    - $ref: '#/components/schemas/ChildB'
    当我尝试在注释中设置属性时,我无法做到这一点。当我调试 的代码时io.swagger.v3.core.jackson.ModelResolver ,我没有设法找到一种方法来做到这一点。
    到目前为止,我还没有找到对我有帮助的代码示例。
    有没有办法让 ComposedSchema(在我的例子中包含在 ContainerClass 中的数组)有一个 鉴别器 生成的部分springdoc-openapi-maven-plugin 执行?

    最佳答案

    这是默认的生成结构。由 swagger-api 直接处理(而不是 springdoc-openapi。
    生成的 OpenAPI 描述看起来很正确。
    使用 springdoc-openapi,您可以定义一个 OpenApiCustomiser Bean,您可以在其中更改在 OpenAPI 级别定义的 components 元素的元素:

  • https://springdoc.org/faq.html#how-can-i-customise-the-openapi-object-
  • 关于spring-boot - OpenApi - 有没有办法在使用 springdoc-openapi-maven-plugin 生成的契约(Contract)中使用带有鉴别器部分的组合模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62631579/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com