本文仅为个人理解,欢迎大家批评指错
首先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也不用这个.
jakarta.servlet
jakarta.servlet-api
6.0.0
provided
来个错误演示,加了之后的效果
这是因为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
io.springfox
springfox-swagger2
2.9.2
io.springfox
springfox-swagger-ui
2.9.2
- 在config目录下新建一个配置类
@configuration //告诉spring容器这是一个配置类
@enableswagger2 //开启swagger的功能
public class swaggerconfig {
@bean
public 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