Spring MVC控制器无法识别,所有接口返回HTTP 404错误求助
解决方案
1. 修正DispatcherServlet的URL映射
/*会拦截所有请求(包括JSP和静态资源),导致Tomcat的JSP Servlet无法处理视图请求,同时干扰Spring MVC的接口映射。修改为默认映射:
<servlet-mapping> <servlet-name>TodoListServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
/仅处理Spring MVC的路由请求,静态资源和JSP会由Tomcat默认Servlet处理。
2. 添加静态资源处理配置
在main.xml中添加默认Servlet处理器,确保静态资源正常访问的同时不影响接口:
<mvc:annotation-driven /> <mvc:default-servlet-handler/> <!-- 新增此行 -->
3. 验证视图文件路径匹配
视图解析器配置的prefix="/WEB-INF/view/"和suffix=".jsp"意味着:
return "home"会查找/WEB-INF/view/home.jspreturn "welcome"会查找/WEB-INF/view/welcome.jsp
确保这些JSP文件存在于对应路径下。
4. 检查接口返回格式问题
对于返回ResponseEntity的接口(如/user),确保:
- 请求头包含
Content-Type: application/json - 请求体为合法JSON格式
jackson-databind依赖已正确引入(pom.xml中已配置)
5. 确认组件扫描生效
查看Tomcat启动日志,确认UserController被Spring扫描并注册为Bean,日志示例:
INFO: Mapped "{[/user],methods=[POST]}" onto public org.springframework.http.ResponseEntity<org.todolist.domain.User> org.todolist.controller.UserController.createUser(org.todolist.domain.User)
6. 调整MySQL驱动配置(可选)
JDBC 4.0+无需手动指定驱动类,可删除dataSource_mysql中的driverClassName属性,避免版本兼容问题:
<bean id="dataSource_mysql" class="org.springframework.jdbc.datasource.SingleConnectionDataSource" destroy-method="close"> <property name="url" value="jdbc:mysql://localhost:3306/todolist_DB" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean>
内容的提问来源于stack exchange,提问作者Xanaxna
相关产品推荐
相关产品推荐

