Spring Boot 3.1.4中指定Swagger UI仅展示部分GroupedOpenApi
解决Swagger UI仅显示指定GroupedOpenApi分组的问题
针对Spring Boot 3.1.4(Java 17)+ springdoc-openapi-starter-webmvc-ui 2.2.0的场景,要让Swagger UI仅展示5个分组中的3个,同时保留另外2个给Redoc使用,可通过以下两种可行方案实现:
方案一:使用SwaggerUiCustomizer自定义接口
springdoc提供了SwaggerUiCustomizer接口用于定制Swagger UI配置,可在合适时机过滤掉不需要展示的分组:
import org.springframework.context.annotation.Configuration; import org.springdoc.core.customizers.SwaggerUiCustomizer; import org.springdoc.core.properties.SwaggerUiConfigProperties; @Configuration public class CustomSwaggerUiConfig implements SwaggerUiCustomizer { @Override public void customize(SwaggerUiConfigProperties swaggerUiConfig) { // 移除不需要在Swagger UI显示的分组(示例为group4、group5) swaggerUiConfig.getUrls().removeIf(url -> url.getName().equals("group4") || url.getName().equals("group5") ); } }
说明
url.getName()对应你定义的GroupedOpenApiBean的groupName属性,替换成实际需要隐藏的分组名称即可;- 该方法会在Swagger UI配置初始化完成后执行,确保过滤逻辑覆盖自动注册的分组URL。
方案二:使用BeanPostProcessor修改配置
通过Bean后置处理器,在SwaggerUiConfigProperties Bean初始化完成后修改其URL列表:
import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.stereotype.Component; import org.springdoc.core.properties.SwaggerUiConfigProperties; @Component public class SwaggerUiUrlFilter implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof SwaggerUiConfigProperties swaggerUiConfig) { // 仅保留需要展示的分组(示例为group1、group2、group3) swaggerUiConfig.getUrls().removeIf(url -> !url.getName().equals("group1") && !url.getName().equals("group2") && !url.getName().equals("group3") ); } return bean; } }
为什么之前的方法无效?
springdoc.api-docs.groups.enabled属性在springdoc-openapi 2.x版本中已被移除,分组默认启用;springdoc.swagger-ui.urls[]配置是追加而非覆盖,springdoc会自动将所有GroupedOpenApi对应的URL添加到列表中,手动配置的URL只会额外增加;- 直接修改
AbstractSwaggerUiConfigProperties时机不对,后续初始化逻辑可能会重新填充全部分组URL,导致修改失效。
关于Redoc的兼容性
上述方案仅修改Swagger UI的展示列表,不会影响GroupedOpenApi Bean的存在,Redoc仍可通过对应的API文档地址(如/v3/api-docs/group4、/v3/api-docs/group5)访问指定分组的接口文档。
内容的提问来源于stack exchange,提问作者nicolas
相关产品推荐
相关产品推荐

