从 Boot 3 升到 4 不是改个版本号就完事。我实际踩到的三个坑,按"会让你编译不过"的程度排序。

一、and() 被移除

Spring Security 7 把链式调用的 and() 从整个 builder 层级删掉了,旧写法直接编译失败:

// ❌ 编译不过
http.csrf().disable().authorizeRequests()...

// ✅ 只能 lambda DSL
http.csrf(csrf -> csrf.disable())
    .authorizeHttpRequests(auth -> auth.anyRequest().authenticated());

二、测试 starter 被拆开

@WebMvcTest 已经不在 spring-boot-test-autoconfigure 里了,新包名是 org.springframework.boot.webmvc.test.autoconfigure,依赖也要换成 spring-boot-starter-webmvc-test。

三、parent 坐标别写错

这条最坑:Spring Initializr 会给你生成 4.1.1.RELEASE,这个坐标在 Maven Central 上是 404。 Boot 从 2.4 起就不带 .RELEASE 后缀了。

写法 结果
4.1.1.RELEASE ❌ 404
4.1.1 ✅ 正确

教训:任何"工具生成的东西"都要自己验证一遍,尤其是版本号这种看起来最不可能出错的地方。