Spring Boot中@RequestMapping("/")仅返回404,其他URL正常求助排查
检查静态资源目录下的
index.html:Spring Boot默认会优先将根路径/的请求映射到static/public等静态资源目录下的index.html,如果存在该文件,会直接返回静态页面而不走Controller方法。可临时删除该文件测试,或通过spring.mvc.static-path-pattern配置调整静态资源访问路径。排查重复的根路径映射:检查项目中是否有其他Controller类也使用了
@RequestMapping("/")或@GetMapping("/"),这类重复映射可能导致你的HomeController被覆盖。可查看启动日志中RequestMappingHandlerMapping相关输出,确认根路径对应的处理方法。检查自定义WebMvcConfigurer配置:如果重写了
WebMvcConfigurer的addViewControllers方法,比如添加了registry.addViewController("/").setViewName("index");,会直接映射视图而绕过Controller方法,需确认这类配置是否存在冲突。验证过滤器/拦截器逻辑:排查项目中的自定义Filter或Interceptor,看是否在处理根路径请求时直接返回、修改了请求路径,导致请求未到达Controller。可临时禁用这类组件测试根路径是否正常。
确认模板引擎配置(若使用):如果返回的
index是模板页面,检查模板文件是否存在于正确目录(如Thymeleaf的src/main/resources/templates/index.html),以及模板引擎的前缀、后缀配置是否正确。检查依赖与版本问题:部分旧版Spring Boot可能存在根路径映射Bug,或项目中存在spring-web/spring-webmvc依赖冲突。可尝试升级Spring Boot到稳定版本,或通过
mvn dependency:tree/gradle dependencies查看依赖树排查冲突。排查Actuator组件干扰:若引入了
spring-boot-starter-actuator,检查配置文件中是否设置了management.endpoints.web.base-path=/,该配置会让Actuator占用根路径,导致Controller映射失效,需调整Actuator的base-path到其他路径。再次确认Controller扫描范围:虽然已确认Bean生成,但可检查启动类的
@SpringBootApplication注解扫描范围是否包含HomeController所在包,避免因包结构问题导致映射未注册(此情况概率较低)。
内容的提问来源于stack exchange,提问作者terius

