Spring 启动 - 仅在 Swagger UI 中公开端点,而不是通过直接 HTTP 调用
Spring Boot - expose endpoints only in Swagger UI but not via direct HTTP call
是否可以仅在 Swagger UI 中公开某些选定的端点,但通过直接 HTTP 调用使它们 un 在服务器上可用?
有 @Operation(hidden=true)
不在 Swagger 中公开端点 UI 但它仍然在服务器上可用。我只需要“倒置行为”。
用例:我们有 Swagger UI 通常在生产中被禁止。我希望某些端点仅在 Swagger UI 中可用,以便在开发期间进行测试。
版本:Spring Boot 2.6.2,springdoc-openapi-ui 1.6.3.
Use case:
- we have Swagger UI normally forbidden in production.
- I want to have some endpoints available only in Swagger UI for testing purposes during development.
对此(请求类型uirement)的“最灵活”解决方案可能是 Profiles!
我们可以:
@SpringBootApplication(exclude = {
SpringDocWebMvcConfiguration.class,
SpringDocConfiguration.class
})
public class MySpringApp {...
从我们的主配置(默认配置文件)中排除 openapi 配置(因为无论如何它都是被禁止的)。
那我们就介绍一下:
@Configuration
@Profile("documented") // ! this gets only activated/loaded, when "documented" is (one of) spring.aprofiles.active
@Import({
SpringDocWebMvcConfiguration.class,
SpringDocConfiguration.class
})
// customize API here ...
class DocConfig {
// ...and/or here
}
所有我们要“招摇”的控制器,我们也注释为:
@Profile("documented")
@[Rest]Controller public class MyDevController {
...
不幸的是,我们只能在 bean methods/classes 上使用 @Profile
,要根据“请求映射”(方法)使用它,我们必须复制并隔离控制器:
一个有:
@Profile("documented") // work in progress
和原始控制器:
@Profile("!documented") // as in prod
我们必须相互排除它们("documented"
vs "!documented"
),否则(路径)映射将不明确。
有了这个,运行 我们的生产应用程序(没有“记录的”配置文件)将:
- 跳过springdoc配置
- 公开没有:
- 招摇-ui
- 无api端点
- 不加载配置文件“已记录”的任何控制器。
运行 我们的应用程序在 dev/loaclly 中,我们将设置 spring.profiles.active=documented
,而 springdoc 将:
- 公开 ui 和端点:
- “记录”(和默认!)控制器。
是否可以仅在 Swagger UI 中公开某些选定的端点,但通过直接 HTTP 调用使它们 un 在服务器上可用?
有 @Operation(hidden=true)
不在 Swagger 中公开端点 UI 但它仍然在服务器上可用。我只需要“倒置行为”。
用例:我们有 Swagger UI 通常在生产中被禁止。我希望某些端点仅在 Swagger UI 中可用,以便在开发期间进行测试。
版本:Spring Boot 2.6.2,springdoc-openapi-ui 1.6.3.
Use case:
- we have Swagger UI normally forbidden in production.
- I want to have some endpoints available only in Swagger UI for testing purposes during development.
对此(请求类型uirement)的“最灵活”解决方案可能是 Profiles!
我们可以:
@SpringBootApplication(exclude = {
SpringDocWebMvcConfiguration.class,
SpringDocConfiguration.class
})
public class MySpringApp {...
从我们的主配置(默认配置文件)中排除 openapi 配置(因为无论如何它都是被禁止的)。
那我们就介绍一下:
@Configuration
@Profile("documented") // ! this gets only activated/loaded, when "documented" is (one of) spring.aprofiles.active
@Import({
SpringDocWebMvcConfiguration.class,
SpringDocConfiguration.class
})
// customize API here ...
class DocConfig {
// ...and/or here
}
所有我们要“招摇”的控制器,我们也注释为:
@Profile("documented")
@[Rest]Controller public class MyDevController {
...
不幸的是,我们只能在 bean methods/classes 上使用 @Profile
,要根据“请求映射”(方法)使用它,我们必须复制并隔离控制器:
一个有:
@Profile("documented") // work in progress
和原始控制器:
@Profile("!documented") // as in prod
我们必须相互排除它们("documented"
vs "!documented"
),否则(路径)映射将不明确。
有了这个,运行 我们的生产应用程序(没有“记录的”配置文件)将:
- 跳过springdoc配置
- 公开没有:
- 招摇-ui
- 无api端点
- 不加载配置文件“已记录”的任何控制器。
运行 我们的应用程序在 dev/loaclly 中,我们将设置 spring.profiles.active=documented
,而 springdoc 将:
- 公开 ui 和端点:
- “记录”(和默认!)控制器。