发帖|

关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecg@qq.com

查看: 11|回复: 0

Spring Boot 4 升级踩坑实录

J 小助2026-11-1211阅读1分钟版块:Jeecg经验分享
[复制链接]
发表于 7 小时前 | 显示全部楼层 |阅读模式

JeecgBoot 从 Spring Boot 3.5.5 升级到 4.1.0 (Spring Framework 7.x) 的兼容性修复记录

升级概述

项目 旧版本 新版本
Spring Boot 3.5.5 4.1.0
Spring Framework 6.x 7.x
Java 17 17

编译期修复

1. 实体字段名不匹配导致 getter 不存在

文件: OpenApiController.java

openApi.getBody() → openApi.getRequestBody()

原因: 实体 OpenApi 字段名为 requestBody,Lombok 生成的是 getRequestBody(),原来写错了方法名。

2. HttpHeaders 改为 final 类,禁止匿名子类

文件: Response.java

// ❌ Spring Framework 7: HttpHeaders 是 final
new HttpHeaders() { { put("Content-Type", contentType); } };

// ✅ 标准写法
HttpHeaders headers = new HttpHeaders();
headers.put("Content-Type", contentType);

3. ResponseEntity.getStatusCodeValue() 已移除

文件: HttpNode.java

responseEntity.getStatusCodeValue() → responseEntity.getStatusCode().value()

4. MediaType.APPLICATION_JSON_UTF8_VALUE 已移除

文件: 多个文件

MediaType.APPLICATION_JSON_UTF8_VALUE → MediaType.APPLICATION_JSON_VALUE

原因: Spring 5.3+ JSON 默认就是 UTF-8 (RFC 8259)。

5. HttpHeaders.containsKey() 已移除

文件: HttpNode.java, ToolsNode.java

// ❌
headers.containsKey(HttpHeaders.CONTENT_LENGTH)
headers.containsKey(HttpHeaders.CONTENT_TYPE)

// ✅
headers.getContentLength() == -1
headers.getContentType() == null

6. HttpComponentsClientHttpRequestFactory 超时方法已移除

文件: HttpNode.java

HttpComponentsClientHttpRequestFactory → SimpleClientHttpRequestFactory

7. UriComponentsBuilder.fromHttpUrl() 已移除

文件: BraveSearchToolBuilder.java

UriComponentsBuilder.fromHttpUrl(...) → UriComponentsBuilder.fromUriString(...)

运行时修复

8. Redis 容器 Bean 冲突

文件: DragWebSocket.java

// ❌ 两个 bean: redisContainer vs redisMessageListenerContainer
@Autowired(required = false)
private RedisMessageListenerContainer container;

// ✅ 指定 bean
@Qualifier("redisContainer")
@Autowired(required = false)
private RedisMessageListenerContainer container;

9. MongoDB 配置键改名

配置: application-*.yml (10个文件)

spring.data.mongodb.uri → spring.mongodb.uri

10. server.error.include-* 属性全部移除

配置: application-*.yml (10个文件)

删除以下三个已废弃属性:

  • server.error.include-exception
  • server.error.include-message
  • server.error.include-stacktrace

教训总结

做对的

  1. 先编译再运行,逐步修复编译错误
  2. 识别出哪些是 Spring Boot 4 兼容问题,哪些是已有项目缺失依赖

做错的

  1. YAML 批量修改用 Python 脚本不够谨慎 — 正则替换极易破坏缩进和注释,导致 mybatis 变成 ybatis、注释 # 丢失、缩进错位
  2. 第一次测试脚本后没有再验证 — 脚本逻辑有 bug 导致数据被破坏
  3. 重复修改同一个文件多次 — 应该先备份,好则保留、不好则回退
  4. YAML 修改没有使用专门工具 — Python 脚本拼接字符串做 YAML 编辑是高风险操作,应优先用结构化的 YAML 解析库

正确做法(下次升级参考)

  1. 编译期: 用 mvn clean compile 发现所有错误 → 逐个 Java 文件用 Edit 工具精确替换
  2. 运行时: 启动应用 → 根据 Spring Boot migration guide 逐个修复配置 key
  3. YAML 修改: 不要用字符串替换,用 ruamel.yaml 或 snakeyaml 做结构化读写
  4. 修改前先备份: git stash 或简单拷贝
  5. 每次修改后立即验证: 读文件确认效果

日期: 2026-07-07 项目: JeecgBoot 3.9.3 → Spring Boot 4.1.0

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表