Ubuntu环境下Swagger兼容性问题的常见解决方法
Swagger(尤其是SpringFox集成方案)对JDK版本有明确要求,旧版JDK(如Java 8)可能导致启动错误。需升级至推荐的JDK 11及以上版本。
操作步骤:
java -version
;sudo apt remove openjdk-8-jdk
;sudo apt install openjdk-11-jdk
;java -version
(需显示版本为11及以上)。Spring Boot版本升级后,需同步调整Swagger依赖版本以避免冲突。例如,Spring Boot 3.x需配合SpringDoc(而非旧版SpringFox)使用。
操作步骤:
pom.xml
中删除springfox-boot-starter
相关条目;pom.xml
中加入org.springdoc:springdoc-openapi-ui
(版本需适配Spring Boot,如2.0.2+);@EnableSwagger2
替换为@EnableOpenApi
,并调整Docket
的DocumentationType
为OPEN_API_3_0
。高版本Spring Boot与Swagger可能因路径匹配策略(如Jakarta EE 9+的jakarta.servlet
包)引发冲突,导致启动失败。
解决方法:
jakarta.servlet-api
依赖,在pom.xml
中添加:<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
javax.servlet-api
依赖(版本4.0.1+):<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
Ubuntu环境下,Swagger UI可通过多种方式运行,选择合适的方式可避免环境兼容问题:
sudo apt install docker.io
;docker pull swaggerapi/swagger-ui
;docker run -p 8080:8080 swaggerapi/swagger-ui
;http://localhost:8080
。sudo apt install nodejs npm
;sudo npm install -g swagger-ui
;swagger-ui
(默认端口8080)。wget https://github.com/swagger-api/swagger-ui/archive/refs/tags/v3.48.0.tar.gz
;npm install
;npm start
(默认端口3000)。若API服务器启用了CORS(跨域资源共享)或鉴权(如JWT Token),需在Swagger UI中配置对应参数:
index.html
中配置requestInterceptor
注入Token:requestInterceptor: (request) => {
request.headers['Authorization'] = 'Bearer ' + localStorage.getItem('token');
return request;
}
Swagger 2已于2017年停止维护,建议升级至Swagger 3(OpenAPI 3)以获得更好的兼容性和功能支持:
io.swagger.annotations
替换为io.swagger.v3.oas.annotations
(如@ApiOperation
→@Operation
);swagger.json
/swagger.yaml
的openapi
版本为3.0.0
。