Swagger 2 UI Как показать модели, которые явно не возвращены RestController - PullRequest
0 голосов
/ 21 марта 2019

У меня возникла следующая проблема: на swagger в разделе «Модели» я вижу только абстрактный базовый класс, расширенный еще на 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();
    }

Итак, проблема, которая у меня есть, связана с пользовательским интерфейсом, в разделе Модели я вижу только BaseClass и никаких других классов вообще ...

Я попробовал это, потому что где-то я видел этот пример:

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

но так у меня возникает проблема "kotlin", то есть "имя отсутствует", также я не могу сделать AnotherClass :: class ...

1 Ответ

2 голосов
/ 22 марта 2019

Вы должны будете добавить их в конфигурацию, как показано ниже:

    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 для требуемой настройки.

...