Swagger jaxrs.如何为所有数据对象生成单个枚举引用



我使用kotlin + Jersey和swagger文档生成器,方法为code first.

我有两个DTO

enum class DataType {
FIRST, SECOND;
}
data class Data1(type: DataType)
data class Data2(type: DataType)

gradle依赖

implementation("io.swagger.core.v3:swagger-jaxrs2-jakarta:2.2.6")

文档的预期结果:

components:
schemas:
DataType:
type: string
enum: [ FIRST, SECOND ]
Data1:
type: object
properties:
type: 
$ref: '#/components/schemas/DataType'
Data2:
type: object
properties:
type: 
$ref: '#/components/schemas/DataType'

实际结果

components:
schemas:
Data1:
type: object
properties:
type: 
type: string
enum: [ FIRST, SECOND ]
Data2:
type: object
properties:
type: 
type: string
enum: [ FIRST, SECOND ]

问题是,如果任何客户端重用schema来为自己的应用生成类,他就会为type属性获得两个单独的enum类。

Q:如何使生成器检测到它是相同的enum和提取它单独的类型引用?

好的,我自己找到了一个方法

import io.swagger.v3.core.jackson.ModelResolver.SET_PROPERTY_OF_ENUMS_AS_REF
init {
System.setProperty(SET_PROPERTY_OF_ENUMS_AS_REF, "any value")
}

另一种方法是实现自定义ModelResolver,但是类的实现看起来相当复杂

UDPATE刚刚注意到,ModelResolver中的public static boolean enumsAsRef = System.getProperty("enums-as-ref") != null;不是最终的。我们可以做更简单的

init {
io.swagger.v3.core.jackson.ModelResolver.enumsAsRef = true
}

相关内容

  • 没有找到相关文章

最新更新