Spring Boot中GET请求/todo-list/user/list被映射至/error的原因排查
问题分析与解决
核心结论:你在拦截器中拿到的classMapping.value()值来自Spring默认的BasicErrorController——这说明你的请求根本没匹配到UserController的listGrid方法,而是触发了Spring的错误处理流程,拦截器才会拿到错误控制器的HandlerMethod。
下面是具体排查方向:
1. UserController未被Spring容器注册
检查UserController所在包是否在Spring的组件扫描范围内:
- 如果启动类的
@SpringBootApplication注解所在包是com.example.todolist,但UserController在com.example.user这类未被扫描的子包下,控制器不会被Spring识别。 - 解决方法:调整包结构让控制器处于启动类所在包或其子包下,或者在启动类上添加
@ComponentScan(basePackages = {"你的启动类包", "UserController所在包"})。
2. 拦截器逻辑触发异常跳转
检查拦截器preHandle方法的后续代码是否抛出未捕获的异常:
- 一旦拦截器抛出异常,Spring会自动将请求转发到错误处理路径,此时
handler会切换为BasicErrorController的方法。 - 解决方法:给拦截器代码添加异常捕获逻辑,或调试后续代码定位异常点。
3. 请求匹配规则冲突或异常
- 检查是否存在其他控制器的路径与
/user/list冲突,比如有另一个控制器的方法路径相同但请求方法为POST,导致GET请求无法匹配触发错误。 - 检查是否自定义了
WebMvcConfigurer修改了请求匹配规则,比如禁用了默认映射策略、添加了自定义路径匹配器,导致/user/list无法被正确识别。
快速验证方法
暂时移除拦截器,直接请求/todo-list/user/list:
- 如果能正常返回数据,说明问题出在拦截器逻辑;
- 如果仍跳转到错误路径,说明是控制器注册或请求匹配的问题。
内容的提问来源于stack exchange,提问作者Ali Mnf
相关产品推荐
相关产品推荐

