96SEO 2026-06-14 05:23 30
哎呀,说实话,SpringBoot 2.x 升级到 3.x 那事儿啊,真是让人又爱又恨。
先说结论吧:Swagger 那玩意儿直接搬不动了得换成 SpringDoc OpenAPI。

别慌,我这就把迁移过程拆成几块儿聊聊。
一、先把 JDK 拉到 17+,别忘了SpringBoot 3.x 要求 Java 17 或geng高。
Ru果你还在用 JDK8,那升级前先把编译器、IDE dou调好。
哈哈,我之前还有同事因为 JDK 不兼容报错,一头雾水。
别急,改完以后再跑单元测试,确保老功Neng还Neng跑通。
二、Maven / Gradle 依赖全换Zui关键的一步,就是把原来的 springfox-swagger2springfox-swagger-ui 删掉。
然后加上 SpringDoc 的 starter:
org.springdoc
springdoc-openapi-starter-webmvc-api
2.5.0
别忘了把父 POM 的 改成Zui新的 3.x 系列。
比如 MyBatis‑Plus,要换成 mybatis-plus-spring-boot3-starter。
还有Ru果用了 validation,要从 javax.validation 改成 jakarta.validation。
这里面Zui坑的是注解名变了好在官方给了对照表。
| Swagger 注解 | OpenAPI 注解 | 说明 |
|---|---|---|
| @Api | @Tag | # 控制器类标记 |
| @ApiOperation | @Operation | # 方法描述 |
| @ApiParam | @Parameter | # 参数说明 |
| @ApiModelProperty | @Schema | # 实体属性描述 |
| @ApiIgnore | @Hidden 或 Operation | # 隐藏接口/字段 |
举个例子:
Swagger 写法
import io.swagger.annotations.*;
@Api
public class UserController {
@ApiOperation
public User getUser String userId) {
// ...
}
}
@ApiModel
class User {
@ApiModelProperty
private String userId;
@ApiModelProperty
private String username;
}
Swagger 写法——OpenAPI 用法
import io.swagger.v3.oas.annotations.*;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.media.Schema;
@Tag
public class UserController {
@Operation
public User getUser String userId) {
// ...
}
}
@Schema
class User {
@Schema
private String userId;
@Schema
private String username;
}
四、配置类也要搬家啦
Swagger 原来的配置大多是用 Docket 配合 @EnableSwagger2.
SparDoc 则geng轻量,只需要声明一个 GroupedOpenApi Bean。
@Configuration
public class SpringDocConfig {
@Bean
public GroupedOpenApi publicApi {
return GroupedOpenApi.builder
.group
.packagesToScan
.build;
}
}
五、常见坑 & 小技巧
接口文档不显示?别慌!先检查配置路径是否匹配。
P.S. 有时候 IDE 自动补全会把 .properties -file 写成 .properties., 导致加载失败。哈哈,这种细节真的Neng把人逼疯。
@RequestMapping 上加上 {"/path","/path/"}.
为什么百度不收录我的 Swagger UI 页面?🤔
A:百度爬虫默认会过滤掉hen多 JS 渲染的页面而 Swagger UI 是前端用 JS 动态生成文档的。要想被收录,需要给出静态化的 HTML(比如使用 springdoc-openapi-webmvc-ui 并开启 /v3/api-docs/swagger-config.json?) 或者在 robots.txt 中明确放行 /swagger-ui.html 路径。另外把页面标题和 meta 描述写得geng友好点,也Neng提升收录概率。说实话,这事儿跟 SEO geng挂钩,不是代码本身的问题啦。
Maven 中Ru果还有旧版 spring-boot-starter-test 的依赖,需要升级到对应的 3.x,否则测试报错;
Kotlin 项目同样要把所有 javax.* 包改成 jakarta.*;
If you use Actuator, add /actuator/openapi/** 才Neng让它一起暴露出来;
Caching 注解也迁移到了 jakarta.cache 包下不改会报 NoClassDefFoundError;
MVC 配置里Ru果用了旧的 WebMvcConfigurerAdapter,要改成实现 WebMvcConfigurer 接口;
"哈哈"…别笑,我当时真的是手抖删掉了一个重要 bean,项目直接启动不了…害!赶紧回滚再来一次。
六、一步步迁移实战流程- 把 pom.xml 的 parent 换成Zui新的 spring‑boot‑starter‑parent 版本。
org.springframework.boot
spring-boot-starter-parent
3.1.4
- 全局搜索 “springfox” 删除相关依赖。
- 加入 SpringDoc OpenAPI starter。
- 用 IDE 把所有 `javax.` 替换为 `jakarta.` 。
- 把老旧的 Swagger 注解批量替换为对应的新注解。Ke以写个小脚本,用正则搞定:
grep -rl 'io.swagger.annotations' src/main/java | xargs sed -i 's/io.swagger.annotations/io.swagger.v3.oas.annotations/g'
grep -rl '@Api' src/main/java | xargs sed -i 's/@Api/@Tag/g'
# ... 按需继续
- 在配置类里加上 SpringDocConfig,上面Yi经示例完毕。
- 启动项目,用浏览器打开 /swagger-ui.html查kan文档是否渲染正常。
七、结束语——咱们说点感受吧 🎉说真的,这次升级让我体会到技术栈演进的无情与温柔并存。
Eclipse 老友提醒我:“别忘了 clean 再 install。” 我差点没听进去,还真把旧缓存跑进来了……害!后来才发现 clean 一下一切恢复正常。
AOP 切面没动,却因为 jakarta 包名变化导致代理失效,这种细节真的让人抓狂。不过一旦搞定后你会发现整个系统dou轻盈了不少,新特性像 Reactive WebFlux 那种,douKe以慢慢尝鲜啦。
TMD,有时候我觉得自己像在玩拼图游戏——每块dou要恰到好处才Neng拼出完整画面。不过咱们老友之间互相帮忙,就算卡住也Neng一起 debug 到天亮,对吧?你懂的~ 😆.
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback