Spring Boot 3.2.1迁移后带斜杠结尾的Rest端点无法访问
Spring Boot 3 带尾部斜杠的端点返回404?这是有意调整的行为
这不是Bug,是Spring Boot 3(对应Spring MVC 6)有意调整的默认路径匹配规则。
为什么会出现这个变化?
Spring Boot 2.x(基于Spring MVC 5)默认开启了useTrailingSlashMatch配置——不管请求路径带不带尾部斜杠,都会匹配到对应的控制器方法,比如/api/v1/locations和/api/v1/locations/会被视为同一个路径。
但从Spring MVC 6开始,官方把这个配置的默认值改成了false,也就是严格匹配路径:只有请求路径和注解里声明的完全一致时,才会映射到对应的方法。这么做是为了更贴合HTTP规范,避免因尾部斜杠引发的路由歧义。
怎么解决?
如果需要兼容旧的请求习惯,有两种方案可选:
方案一:全局开启尾部斜杠匹配
在配置文件里添加以下配置,恢复Spring Boot 2.x的行为:
- YAML格式(application.yml):
spring: mvc: pathmatch: trailing-slash-match: true
- Properties格式(application.properties):
spring.mvc.pathmatch.trailing-slash-match=true
方案二:单个端点同时支持两种路径
在控制器的@GetMapping注解里,同时声明带斜杠和不带斜杠的路径:
@RestController @RequestMapping("/api/v1") @RequiredArgsConstructor public class TodosController { @GetMapping({"/locations", "/locations/"}) public List<Integer> findAllCoordinates(){ return List.of(10,15); } }
建议
官方调整这个规则是为了规范路径匹配,建议优先让前端或调用方适配新规则(去掉请求路径的尾部斜杠)。如果必须兼容旧请求,再通过配置恢复,但要注意可能带来的路由冲突问题。
内容的提问来源于stack exchange,提问作者Ish Mahajan
相关产品推荐
相关产品推荐

