Spring Framework应用仅返回404错误,请求未触发对应处理器
针对你遇到的/test路径返回404、日志显示请求已到达但Controller方法未执行的问题,可从以下几个方向排查:
组件扫描范围未覆盖Controller类
Spring Boot默认仅扫描启动类所在包及其子包内的组件。如果LoggingController的包不在启动类的包层级下,Spring无法识别该Controller,也就不会注册请求映射。比如启动类在com.example.demo,而Controller在com.example.controller,需在启动类上添加@ComponentScan(basePackages = "com.example.controller")指定扫描路径。未考虑应用上下文路径
若项目配置了服务器上下文路径(如application.properties中设置server.servlet.context-path=/api),实际访问路径应为/api/test而非/test。浏览器直接访问/test会返回404,需确认请求的完整URL是否包含上下文路径。Controller注解异常
检查@RestController注解的导入是否正确,必须是org.springframework.web.bind.annotation.RestController。若导入了错误包的注解,或注解被误注释,Spring不会将该类识别为请求处理器。HTTP请求方法不匹配
虽然日志显示是GET请求,但需确认代码中@GetMapping是否被误写为其他方法注解(如@PostMapping),或实际请求是否因浏览器插件、前端代码等原因使用了其他HTTP方法。Spring MVC自动配置被禁用
若启动类的@SpringBootApplication注解中排除了WebMvc自动配置(如@SpringBootApplication(exclude = WebMvcAutoConfiguration.class)),Web层配置会失效,Controller的请求映射无法注册。检查启动类注解是否存在此类排除配置。拦截器/过滤器拦截了请求
若项目中配置了拦截器或过滤器,且这些组件在请求到达Controller前就返回了404,也会出现该现象。排查拦截器/过滤器的逻辑,确认是否对/test路径进行了拦截处理。
内容的提问来源于stack exchange,提问作者Gunslinger

