Swagger 2 UI如何显示RestController未明确返回的模型

时间:2019-03-21 20:51:48

标签: spring-boot kotlin swagger swagger-ui swagger-2.0

我在Models下的大摇大摆上遇到了一个问题,我只看到抽象基类,该基类被其他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”问题,即“名称丢失”,我也无法执行AnotherClass :: class ...

1 个答案:

答案 0 :(得分:1)

您将必须在配置中添加以下内容:

    return new Docket(DocumentationType.SWAGGER_2)
            .additionalModels(typeResolver.resolve(AnotherClass.class), typeResolver.resolve(OneMoreClass.class))
.....
Swagger 2仍不完全支持

subTypesticket仍处于打开状态

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

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

我刚刚添加了一个示例Kotlin控制器,供您在我的github project中引用。寻找AnimalController.ktSwaggerConfig进行必要的设置。