Spring Boot项目中@GetMapping标注的getListEmployee方法未调用怎么办
问题排查及解决方案
以下是对应问题的排查方向和解决办法:
- 静态资源优先级高于Controller映射(最高概率)
Spring Boot默认会优先处理resources/static、resources/public等静态资源目录下的文件,如果你项目中这些目录下存在真实的index.html文件,请求会直接被静态资源处理器响应,不会进入你写的Controller逻辑。
解决方法:- 把静态资源目录下的index.html文件删除或者重命名
- 如果你需要保留静态index.html,可在
application.properties/application.yml中修改静态资源访问前缀,避免路径冲突:
# application.properties 配置示例 spring.web.resources.static-path-pattern: /static/**
修改后静态资源需要携带/static前缀才能访问,/index.html请求就会正常走到你的Controller中。
- Controller未被Spring扫描注册
检查你的启动类(带@SpringBootApplication注解的类)的包路径:Spring Boot默认只扫描启动类所在包及其子包下的Bean,如果你的启动类不在com.cgi.listeemployes包或其父包下,MainController就不会被实例化注册,对应的映射自然不会生效。
解决方法:在启动类的@SpringBootApplication注解中指定扫描范围:
@SpringBootApplication(scanBasePackages = "com.cgi.listeemployes") public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
路径映射重复冲突
检查项目中是否有其他Controller也声明了/index.html的GET请求映射,Spring MVC会优先匹配优先级更高的映射规则,导致你的方法不被触发。验证方式
直接在浏览器地址栏输入http://{你的服务IP}:{服务端口}/index.html,如果返回的是HTML页面,说明是静态资源拦截的问题;如果返回404,说明Controller没有被正确注册;如果返回用户列表JSON且控制台有打印,说明方法已经正常触发。
内容的提问来源于stack exchange,提问作者kim
相关产品推荐
相关产品推荐

