首页 > 解决方案 > Swagger 2 UI 如何显示未由 RestController 显式返回的模型

问题描述

我有以下问题,在模型下大摇大摆,我看到的只是抽象基类,它被其他 3 个类扩展。我当前的端点返回类的基本类型,因为我可以在一个端点上返回 3 种不同的类型。

所以基本上我有这样的东西

@MappedSuperclass
@ApiModel(description = "Base Details.")
abstract class BaseClass(
    open var id: String? = null,
    var prop1: String? = null,
    var prop2: String? = null,
    var prop3: String? = null,
    var prop4: String? = null
)

@ApiModel(description = "Some Specific Details that contains all base properties.")
data class AnotherClass(
        val prop4: String,
        val prop5: String,
        val prop6: Set<Amount>,
        val prop7: Set<Amount>,
        val prop8: String
) : BaseClass()


@ApiModel(description = "Some more Specific Details that contains all base properties.")
data class OneMoreClass(
        val prop4: String,
        val prop5: String
) : BaseClass()


And in RestController i have this

    @GetMapping
    @ApiOperation(value = "End point description", notes = "Notes notes notes.")
    fun getSomethingFromDatabase(): List<BaseClass> {
        return someService.getData();
    }

所以我遇到的问题是在招摇 UI 上,在模型部分下我只看到 BaseClass 而根本没有其他类......

我试过这个,因为我在某个地方看到了这个例子:

@ApiModel(description = "Base Details.", subTypes = {AnotherClass.class}) 
BaseClass 

但是这样我就有“kotlin”问题,也就是说“名字丢失了”,我也不能做另一个类::类......

标签: spring-bootkotlinswaggerswagger-uiswagger-2.0

解决方案


您必须将它们添加到配置中,如下所示:

    return new Docket(DocumentationType.SWAGGER_2)
            .additionalModels(typeResolver.resolve(AnotherClass.class), typeResolver.resolve(OneMoreClass.class))
.....

subTypes在 Swagger 2 中仍然不完全支持,仍然有一个开放的

对于您的 Kotlin 配置,它应该是这样的:

subTypes = [AnotherClass::class, OneMoreClass::class]

我刚刚添加了一个示例 Kotlin 控制器供您在我的 github项目中参考。查找AnimalController.kt&SwaggerConfig以获取所需的设置。


推荐阅读