SpringDoc/Swagger UI URL显示异常,如何禁用context-path自动追加?
解决方案:禁用SpringDoc Swagger UI自动追加context-path
针对你遇到的Swagger UI自动拼接context-path导致路径错误的问题,有两种可行的解决方式:
方法1:使用绝对/协议相对路径配置swagger-ui.url
SpringDoc会对相对路径格式的swagger-ui.url自动追加context-path,改用绝对路径或协议相对路径即可绕过这个逻辑:
修改application.yaml中的SpringDoc配置:
springdoc: swagger-ui: path: /swagger disable-swagger-default-url: true # 使用协议相对路径(适配http/https环境) url: //service-api/api/service/swagger.json # 或者使用完整绝对路径(指定域名) # url: http://your-deployment-domain/service-api/api/service/swagger.json api-docs: path: /swagger.json
方法2:自定义配置类强制设置URL
如果不想使用绝对路径,可以通过自定义配置类直接覆盖Swagger UI的URL配置,跳过context-path的自动拼接逻辑:
创建配置类:
import org.springdoc.core.properties.SwaggerUiConfigProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @EnableConfigurationProperties(SwaggerUiConfigProperties.class) public class CustomSwaggerUiConfig { @Bean public SwaggerUiConfigProperties swaggerUiConfigProperties() { SwaggerUiConfigProperties config = new SwaggerUiConfigProperties(); config.setPath("/swagger"); config.setDisableSwaggerDefaultUrl(true); // 直接设置目标路径,不触发context-path拼接 config.setUrl("/service-api/api/service/swagger.json"); return config; } }
原理说明
SpringDoc默认逻辑是:当springdoc.swagger-ui.url配置为相对路径(以/开头但不含协议/域名)时,会自动将server.servlet.context-path拼接到路径前方,导致你遇到的/api/service/service-api/api/service/swagger.json错误路径。使用绝对路径或自定义配置类可以绕过该默认拼接逻辑,直接使用你指定的正确路径。
内容的提问来源于stack exchange,提问作者Reid2
相关产品推荐
相关产品推荐

