Spring Boot问题:映射localhost:8080/的方法未被调用
解决Spring Boot中根路径
/映射方法未被调用的问题 看起来你的问题是访问localhost:8080/时对应的home()方法没有被触发,我来帮你排查几个常见的原因和对应的解决办法:
1. 静态资源的默认优先级冲突
Spring Boot默认会把根路径/映射到静态资源目录下的index.html文件。如果你的项目中src/main/resources/static或者src/main/resources/public目录下存在index.html,访问/时会直接返回这个静态页面,不会走到你的控制器方法。
解决办法:
- 如果你不需要这个静态
index.html,直接删除它即可; - 如果你需要保留静态资源,可修改静态资源的访问路径,在
application.properties(或application.yml)中添加配置:
spring.mvc.static-path-pattern=/static/**
这样静态资源需要通过/static/xxx的路径访问,根路径/就会优先匹配你的控制器方法了。
2. 控制器未被Spring Boot扫描到
确保你的控制器类满足以下两个条件:
- 类上标注了
@Controller注解(因为你要返回JSP视图,不要用@RestController,后者会直接返回JSON):
@Controller public class YourController { // 你的index()和home()方法 }
- 控制器所在的包是Spring Boot启动类所在包的子包或同级包。比如启动类在
com.example.demo,控制器要放在com.example.demo.controller这样的子包下。如果控制器在其他路径,需要在启动类上添加@ComponentScan指定扫描范围:
@SpringBootApplication @ComponentScan(basePackages = {"com.your.package.controller"}) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
3. 存在其他映射或拦截器冲突
检查项目中是否有其他控制器也定义了@RequestMapping("/"),或者有没有拦截器对根路径/进行了拦截。可以暂时移除其他相关控制器或拦截器,测试是否能触发home()方法,逐步排查冲突点。
小优化:简化你的方法代码
另外,你的方法参数里注入了ModelAndView但又重新new了一个,其实可以简化写法,避免不必要的注入:
@RequestMapping(value = "/") public ModelAndView home() { ModelAndView modelAndView = new ModelAndView("index"); System.out.println("entrou no /"); return modelAndView; }
内容的提问来源于stack exchange,提问作者rpsouza
相关产品推荐
相关产品推荐

