最近想尝试一下最新的 SpringBoot
项目,于是将自己的开源项目进行了一些升级。
- JDK 版本从
JDK8
升级至JDK17
。 - SpringBoot 版本从
SpringBoot 2.7.3
升级到SpringBoot 3.2.0
SpringFox3.0.0
在 SpringBoot2.7.3
版本的时候,项目使用的是 SpringFox3.0.0
的依赖,用于使用 Swagger
,相关依赖如下:
1 | <dependency> |
项目编译没有问题,但是启动运行的时候报错 javax.servlet.http.HttpServletRequest ClassNotFoundException 异常。
这是因为 SpringFox3.0.0
底层有 Swagger2 和 Swagger3 两套一来,其中 Swagger2 底层依赖 javax 模块,但是在 SpringBoox3
的版本中已经彻底移除了 javax 模块,改为使用 jakarta ,所以才会报这个错误。
openapi3
解决方案:移除 Swagger2,改为完全使用 Swagger3。
在项目 pom.xml 中移除 SpringFox3.0.0
的依赖,改为使用 openapi3
的依赖,如下:
1 | <dependency> |
Swagger 注解迁移
Swagger2 和 Swagger3 使用的是完全不同的两套注解,所以原本使用 Swagger2 相关注解的代码页需要完全迁移,改为使用 Swagger3 的注解。
Swagger2 | Swagger3 |
---|---|
@Api | @Tag |
@ApiOperation | @Operation |
@ApiImplicitParams | @Parameters |
@ApiImplicitParam | @Parameter |
@ApiModel | @Schema |
@ApiModelProperty | @Schema |
@ApiResponses | @ApiResponses |
@ApiResponse | @ApiResponse |
@ApiIgnore | @Hidden 或者 其他注解的 hidden = true 属性 |
@Api
Swagger2 代码
1
Swagger3 代码
1
@ApiOperation
Swagger2 代码
1
Swagger3 代码
1
@ApiImplicitParam
Swagger2 代码
1
2
3
4
5Swagger3 代码
1
2
3
4
5
@ApiModel
Swagger2 代码
1
Swagger3 代码
1
@ApiModelProperty
Swagger2 代码
1
Swagger3 代码
1