最近想尝试一下最新的 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