我正在用Kotlin编写一个Spring Boot应用程序,目前正在努力为一个DTO类生成一个规范,该DTO类具有一个类型为String
的支持字段,我希望稍后将其解析为适配器层中的两个枚举类之一。
我已经尝试了使用oneOf
Annotation值的以下方法,看起来它做了我想要的事情:
data class MyDto(
@Schema(
type = "string",
oneOf = [MyFirstEnum::class, MySecondEnum::class]
)
val identifier: String,
val someOtherField: String
) {
fun transform() { ... } // this will use the string identifier to pick the correct enum type later
}
这将产生以下OpenApi规范:
"MyDto": {
"required": [
"someOtherField",
"identifier"
],
"type": "object",
"properties": {
"identifier": {
"type": "object", // <--- this should be string
"oneOf": [{
"type": "string",
"enum": [
"FirstEnumValue1",
"FirstEnumValue2",
"FirstEnumValue3"
]
}, {
"type": "string",
"enum": [
"SecondEnumValue1",
"SecondEnumValue2",
"SecondEnumValue3"
]
}
]
},
"someOtherField": {
"type": "string"
}
}
}
正如您所看到的,枚举常量(我认为)正确地内联到了规范中,但是字段上的type
注解(我将其设置为string
)被忽略了,从而导致object
类型,我认为在本例中该类型是不正确的。
我的问题是:
- 使用
object
声明而不是string
声明,我的当前代码和结果规范是否有效? - 有没有更好的方法将枚举值嵌入到规范中?
- 编辑以添加:**我正在结合使用Spring Boot v2.7.8和
springdoc-openapi
v1.6.13来自动生成OpenApi规范。
- 编辑以添加:**我正在结合使用Spring Boot v2.7.8和
1条答案
按热度按时间s3fp2yjn1#
我在问题中展示的基于注解的方法似乎无法生成有效的
springdoc-openapi:1.6.13
OpenApi规范,正如Helen在注解中提到的,字段identifier
的类型必须是String。我能够通过使用
GlobalOpenApiCustomizer
Bean手动创建这个特定类的Schema来解决这个问题:这又会产生以下规范: