当应用程序启动文件放在包内时,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)
}
- Java版本:OpenJDK 11
- Springfox-swagger2 版本: 2.9.2
Spring Boot 试图在更深的包中找到它的组件。 IE。如果您将 @SpringBootApplication
放在 activity.app.ActivityApplication
上,Spring Boot 将仅在 activity.app
下搜索,而不会转到 activity.swagger
,在任何其他包上。
如果您不想将 ActivityApplication
移动到 activity
包,那么您需要在 @SpringBootApplication
注释的 scanBasePackages
参数中手动指定基础包:@SpringBootApplication(scanBasePackages = "activity")
.
注意:必须是全包,例如mycompany.myproject.activity
).
我的项目目录结构如下
└── 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)
}
- Java版本:OpenJDK 11
- Springfox-swagger2 版本: 2.9.2
Spring Boot 试图在更深的包中找到它的组件。 IE。如果您将 @SpringBootApplication
放在 activity.app.ActivityApplication
上,Spring Boot 将仅在 activity.app
下搜索,而不会转到 activity.swagger
,在任何其他包上。
如果您不想将 ActivityApplication
移动到 activity
包,那么您需要在 @SpringBootApplication
注释的 scanBasePackages
参数中手动指定基础包:@SpringBootApplication(scanBasePackages = "activity")
.
注意:必须是全包,例如mycompany.myproject.activity
).