Spring Boot 2.5.4中@ResponseBody返回字符串触发404白标错误如何解决?
问题根因
从你提供的运行日志可以看到,/login请求被映射到了静态资源处理器ResourceHttpRequestHandler,而非你定义的LoginController中的接口方法,本质原因是Spring Boot没有扫描到你写的LoginController类,导致对应的路由没有注册。
Spring Boot的@SpringBootApplication注解默认仅会扫描主启动类所在的包及其所有子包下的组件。你当前的LoginController位于com.in28minutes.springboot.web.controller包下,只要主启动类SpringBootFirstWebApplication不在com.in28minutes.springboot或者更上层的父包中,该Controller就不会被Spring识别加载,自然访问对应路径就会返回404。
解决方案
你可以任选以下一种方案修复:
方案1(推荐):调整主启动类包位置
将SpringBootFirstWebApplication移动到com.in28minutes.springboot包下,这是Spring Boot官方推荐的标准项目结构,无需额外配置即可自动扫描所有子包下的组件。
方案2:显式指定扫描包路径
如果不想调整现有包结构,可以在@SpringBootApplication注解上添加scanBasePackages参数,手动指定需要扫描的组件包:
@SpringBootApplication(scanBasePackages = "com.in28minutes.springboot.web.controller") // 若有多个包需要扫描可使用数组格式:scanBasePackages = {"com.xxx.pkg1", "com.xxx.pkg2"} public class SpringBootFirstWebApplication { public static void main(String[] args) { SpringApplication.run(SpringBootFirstWebApplication.class, args); } }
验证
修改后重启项目,启动日志中会出现如下类似内容,说明接口路由注册成功,再次访问/login即可正常返回Hello World:
Mapped "{[/login],methods=[GET],produces=[text/plain]}" to public java.lang.String com.in28minutes.springboot.web.controller.LoginController.loginMessage()
内容的提问来源于stack exchange,提问作者mohanaroy
相关产品推荐
相关产品推荐

