【问题标题】:Swagger does not work when Application startup file is placed inside a package. Kotlin Springboot当应用程序启动文件放在包中时,Swagger 不起作用。 Kotlin Springboot
【发布时间】:2020-04-28 22:14:20
【问题描述】:

我的项目目录结构如下

└── 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 下,招摇页面开始正常工作。但是,当我将它移动到一个包中(在本例中为 app)时,swagger 页面只显示以下错误

错误: 无法推断基本网址。这在使用动态 servlet 注册或 API 位于 API Gateway 后面时很常见。基本 url 是提供所有 swagger 资源的根。例如如果 api 在 http://example.org/api/v2/api-docs 可用,则基本 url 为 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)
}
  • Java 版本:OpenJDK 11
  • Springfox-swagger2 版本:2.9.2

【问题讨论】:

    标签: spring-boot kotlin swagger openjdk-11


    【解决方案1】:

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

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

    注意:它应该是完整的包装,例如mycompany.myproject.activity)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      相关资源
      最近更新 更多