当应用程序启动文件放在包内时,Swagger 不起作用。科特林Springboot

Swagger does not work when Application startup file is placed inside a package. Kotlin Springboot

我的项目目录结构如下

└── activity
    ├── app
    │   └── ActivityApplication.kt
    ├── controller
    │   └── WelcomeMessageController.kt
    ├── exception
    │   ├── ActivityErrorResponse.kt
    │   ├── handler
    │   │   └── ActivityServiceExceptionHandler.kt
    │   └── response
    │       └── ResponseCode.kt
    ├── model
    │   └── WelcomeMessage.kt
    ├── repository
    │   └── WelcomeMessageRepository.kt
    ├── service
    │   └── WelcomeService.kt
    └── swagger
        └── SwaggerConfig.kt

当我将我的 ActivityApplication.kt 文件移动到根包时,即直接在 activity swagger 页面下开始正常工作。但是,当我将它移到一个包中时(在本例中为 app),然后 swagger 页面除了以下错误

之外没有显示任何内容

错误: 无法推断基数 url。这在使用动态 servlet 注册或 API 在 API 网关后面时很常见。 base url 是提供所有 swagger 资源的根。例如如果 api 在 http://example.org/api/v2/api-docs then the base url is http://example.org/api/ 可用。请手动输入位置:

我的 swagger 配置如下所示

@Configuration
@EnableSwagger2
class SwaggerConfig {
    @Bean
    fun api(): Docket {
        return Docket(DocumentationType.SWAGGER_2)
                .pathProvider(object: RelativePathProvider(null) {
                    override fun getApplicationBasePath(): String {
                        return "/activity"
                    }
                })
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.activity.controller"))
                .build()
                .apiInfo(buildApiInfo())
    }

    private fun buildApiInfo(): ApiInfo? {
        return ApiInfo(
                ...)
    }
}

ActivityApplication.kt只有以下代码

@SpringBootApplication
class ActivityApplication

fun main(args: Array<String>) {
    runApplication<ActivityApplication>(*args)
}

Spring Boot 试图在更深的包中找到它的组件。 IE。如果您将 @SpringBootApplication 放在 activity.app.ActivityApplication 上,Spring Boot 将仅在 activity.app 下搜索,而不会转到 activity.swagger,在任何其他包上。

如果您不想将 ActivityApplication 移动到 activity 包,那么您需要在 @SpringBootApplication 注释的 scanBasePackages 参数中手动指定基础包:@SpringBootApplication(scanBasePackages = "activity").

注意:必须是全包,例如mycompany.myproject.activity).