从父类@Schema注释继承必填字段

Inherit required fields from parent class @Schema annotation

提问人:Uros K 提问时间:11/16/2023 更新时间:11/17/2023 访问量:32

问:

这些是我想为其生成 openapi 规范的类:

import org.eclipse.microprofile.openapi.annotations.media.Schema;

@Schema(requiredProperties = {"id"})
public class ArrangementDto {
  private String id;
}

public class CreditCardDto extends ArrangementDto {
  private String number;
}

这是我生成的规范的样子:

ArrangementDto:
      required:
      - id
      type: object
      properties:
        id:
          type: string

CreditCardDto:
      type: object
      properties:
        id:
          type: string
        number:
          type: string

如您所见,CreditCardDto 上需要 id 的信息丢失了。我们应该如何解决这个问题?有没有办法将所需的属性继承到子类?

我正在使用 Quarkus 3,它使用符合 MicroProfile OpenAPI 规范的 Smallrye OpenAPI 扩展来生成 API OpenAPI v3 规范。

java swagger openapi quarkus 微配置文件

评论


答:

0赞 Sobhan 11/16/2023 #1

不确定,但我认为您需要对子类的属性使用 @Schema,并指示它从父类继承了所需的属性!

下面是一个可能对您有所帮助的示例:

@Schema(requiredProperties = {"id"})
public class ArrangementDto {

  private String id;
}

public class CreditCardDto extends ArrangementDto {

  @Schema(required = true)
  private String cardNmber;
}

这样,除了从类继承必填字段之外,您还确认了 的属性是必需的,并且您生成的 OpenAPI 规范现在应该具有它们!cardNumberCreditCardDtoidArrangementDto

评论

0赞 Uros K 11/16/2023
您的示例与我的相同(除了您添加了额外的必填字段 - cardNmber)。这不起作用,在生成的架构中,CreditCardDto 上不需要 id。
0赞 Serkan 11/17/2023 #2

在Quarkus中,你可以选择混合方法来生成你的openapi规范。

含义:您可以提供一个静态的 openapi yaml 文件,注释中的动态部分将被添加到其中。

请参阅此链接: https://quarkus.io/guides/openapi-swaggerui#loading-openapi-schema-from-static-files

还要检查 OpenApi 规范的继承:

https://swagger.io/docs/specification/data-models/inheritance-and-polymorphism/