手把手教你解决spring boot导入swagger2版本冲突问题
本文仅为个人理解,欢迎大家批评指错
首先Spring Boot 3 和 Swagger 2 不兼容。在 Spring Boot 3 中,应该使用 Springdoc 或其他与 Spring Boot 3 兼容的 API 文档工具来替代 Swagger 2。
Swagger 2 的依赖底层使用的是 javax 依赖包,而 Spring Boot 3 使用的是 Jakarta 依赖包。一般来说,可以将 Spring Boot 的版本降到 3.0.1 以下来解决这个问题,但如果想要使用 3.0.1 版本以上的 Spring Boot,启动时就会出现报错。
-
去pop.xml查看你springframework的版本,如果你已经是Spring boot3了,像我这里是当前的最新版3.3.1,那就改成2.7.2,改完之后点击右上角m形状的刷新按钮
-
改完之后使用了HttpServletRequest和HttpServletResponse的类应该都会报错,也是因为我之前提到的Swagger 2 的依赖底层使用的是 javax 依赖包,而 Spring Boot 3 使用的是 Jakarta 依赖包。
此时不用导入这个依赖,加入了也没用spring boot2也不用这个.
<dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.0.0</version><scope>provided</scope>
</dependency>
来个错误演示,加了之后的效果
这是因为Swagger 2 的依赖底层使用的是 javax 依赖包
正确做法加入这两个包替换原来的包就行了,很简单
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-
在添加Swagger依赖之前先运行一下,如果你没报错但是运行失败,那就是java版本太高了,像我这里就是21
-
剩下就简单了,修改application.properties
因为Spring Boot 2.6.X后与Swagger有版本冲突问题,需要加入以下配置
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
- 修改pop.xml
<!-- 添加swagger2相关功能-->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>
</dependency>
<!-- 添加swagger-ui相关功能-->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version>
</dependency>
- 在config目录下新建一个配置类
@Configuration //告诉Spring容器这是一个配置类
@EnableSwagger2 //开启Swagger的功能
public class SwaggerConfig {@Beanpublic Docket createRestApi(){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com"))//com包下的所有AIP都交给Swagger2管理.paths(PathSelectors.any()).build();}/*** 这里为API文档显示的信息*/private ApiInfo apiInfo(){return new ApiInfoBuilder().title("演示项目API").description("学习Swagger2的演示项目").version("1.0").build();}}
成功运行
- 最后一步输入网址即可http://localhost:8080/swagger-ui.html