提问人:Uros K 提问时间:11/16/2023 更新时间:11/17/2023 访问量:32
从父类@Schema注释继承必填字段
Inherit required fields from parent class @Schema annotation
问:
这些是我想为其生成 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 规范。
答:
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 规范现在应该具有它们!cardNumber
CreditCardDto
id
ArrangementDto
评论
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/
评论