Spring Boot项目@ComponentScan注解无法扫描controllers包问题求助
问题解决方案
1. 控制器类注解使用错误
你当前给控制器类加的是@Component注解,该注解只是通用的Spring组件标识,并不会被Spring MVC识别为HTTP请求处理器,自然不会注册路由映射。
解决方法:把
@Component("PrincipalController")替换为@Controller注解,@Controller是Spring MVC专门用来标记请求控制器的注解,只有加了这个注解,类里的@GetMapping/@PostMapping才会生效。
2. @ComponentScan配置覆盖了默认扫描规则
@SpringBootApplication注解本身已经包含了自动组件扫描功能,默认会扫描启动类所在包及其所有子包。你当前主动加的@ComponentScan(value = "com.ejemplospring.reuy.controllers")会直接覆盖默认的扫描规则,如果你有其他配置类、实体类相关组件在其他包下会全部扫描不到。
解决方法二选一即可:
- 不修改启动类位置:直接删除你写的
@ComponentScan注解,改成@SpringBootApplication(scanBasePackages = "com.ejemplospring.reuy"),直接扫描整个项目根包,所有组件都能被识别- 更规范的方案:把启动类移到根包
com.ejemplospring.reuy下,不需要额外配置任何扫描规则,默认就可以扫描到所有子包下的controllers、modelo等包的组件
3. JSP视图解析配置缺失
Spring Boot默认不支持JSP渲染,你返回视图名"index"无法找到对应的jsp文件,需要做如下配置:
- 先引入JSP相关依赖(Maven项目在pom.xml添加):
<!-- JSP解析依赖 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
- 在
application.properties中添加视图解析器配置:
# jsp文件存放目录 spring.mvc.view.prefix=/WEB-INF/jsp/ # jsp文件后缀 spring.mvc.view.suffix=.jsp
注意要把你的index.jsp、login.jsp等文件放到
src/main/webapp/WEB-INF/jsp/目录下,和配置的前缀路径对应。
内容的提问来源于stack exchange,提问作者reymagnus
相关产品推荐
相关产品推荐

