SpringBoot集成Swagger2出现Unable to infer base url.

本文介绍在SpringBoot项目中使用Swagger2进行接口发布时遇到的问题及解决方案。当使用maven打包并通过tomcat部署时,访问swagger-ui.html会出现无法推断baseUrl的错误。文章提供了解决方法,包括在Application类中添加@EnableSwagger2注解和继承SpringBootServletInitializer类。

现象:

SpringBoot集成Swagger2进行接口发布,SpringBoot版本:2.0.1,Swagger2版本:2.8.0

IDEA直接运行可以直接访问,但是maven打成war包通过tomcat发布,访问swagger-ui.html就会出现Unable to infer base url.的报错

解决方法:

不求甚解,尝试几种解决方法,问题解决

方法1、Application增加@EnableSwagger2注释

方法2、Application 继承 SpringBootServletInitializer类

Application extends SpringBootServletInitializer

在Spring Boot应用中配置Swagger 3时,若遇到“无法推断基础URLUnable to infer base URL)”的问题,通常是因为Swagger无法正确识别当前服务的基础路径。以下是一些可能的解决方案: ### 配置`springdoc.openapi.urls`属性 如果应用部署在反向代理或网关之后,或者有多个上下文路径,可以通过显式指定OpenAPI文档的URL来解决此问题。在`application.properties`或`application.yml`中添加如下配置: #### application.properties ```properties springdoc.openapi.urls[0]=http://localhost:8080/v3/api-docs ``` #### application.yml ```yaml springdoc: openapi: urls: - http://localhost:8080/v3/api-docs ``` 这样可以确保Swagger UI能够正确加载OpenAPI描述文件[^1]。 ### 设置正确的服务器URL 在OpenAPI配置中,可以显式设置服务器URL以帮助Swagger UI正确识别基础路径。例如,在配置类中添加如下代码: ```java import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.servers.Server; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.List; @Configuration public class OpenApiConfig { @Bean public OpenAPI customOpenAPI() { return new OpenAPI() .servers(List.of(new Server().url("http://localhost:8080"))); } } ``` 通过这种方式,可以明确告诉Swagger当前服务的基础URL是什么,从而避免自动推断失败的情况。 ### 检查应用的上下文路径 如果应用配置了非默认的上下文路径(如`server.servlet.context-path=/myapp`),请确保在访问Swagger UI时也包含该路径。例如,如果上下文路径为`/myapp`,则应访问: ``` http://localhost:8080/myapp/swagger-ui.html ``` 同时,确保OpenAPI JSON描述文件的URL也包含上下文路径: ``` http://localhost:8080/myapp/v3/api-docs ``` ### 使用Nginx或反向代理时的配置 如果你的应用部署在Nginx或其他反向代理后面,并且通过代理访问服务,请确保代理正确传递了主机头和路径信息。可以在Nginx配置中添加如下内容以确保请求头正确传递: ```nginx location /swagger-ui/ { proxy_pass http://localhost:8080/swagger-ui/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } ``` ### 检查依赖版本 确保使用的`springdoc-openapi`版本与Spring Boot版本兼容。如果版本不匹配,可能会导致各种问题,包括基础URL无法推断。建议使用最新的稳定版本,如: ```xml <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>1.6.14</version> <!-- 请根据实际情况选择最新版本 --> </dependency> ``` ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值