Spring MVC报No mapping for GET /customer/showForm错误如何解决?
针对
No mapping for GET /spring-mvc-demo/customer/showForm报错的排查方案 你贴出的CustomerController路径注解写法本身没有问题,类级别的@RequestMapping("/customer")叠加方法级别的@RequestMapping("/showForm"),组合路径和报错提示的请求路径完全匹配,问题基本出在Spring MVC核心配置环节,按以下优先级逐一排查即可:
- 检查组件扫描包范围
你的Controller类位于com.coding包下,要确保Spring MVC配置文件(通常命名为xxx-servlet.xml,和DispatcherServlet绑定)中配置的组件扫描路径覆盖到该包,正确配置示例:
如果之前配置的base-package范围过窄,比如只写了<context:component-scan base-package="com.coding" />com.coding.service、com.coding.mapper这类子包,Spring容器启动时就不会扫描到CustomerController,自然不会注册对应的请求映射。 - 核对web.xml中DispatcherServlet配置
首先确认servlet-mapping的拦截规则能覆盖目标请求,建议配置为拦截所有路径:
不要把url-pattern写成<servlet> <servlet-name>spring-mvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring-mvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>*.do、/action/*这类和请求路径不匹配的规则,同时要确认init-param指向的Spring MVC配置文件路径正确,启动时没有抛出文件找不到的异常。 - 查看启动日志确认映射注册情况
Spring MVC启动时会在控制台打印所有成功注册的请求映射,格式类似Mapped "{[/customer/showForm],methods=[]}",启动项目后搜索日志,要是找不到CustomerController两个接口的映射注册记录,直接回到第一步检查组件扫描配置即可。 - 校验请求方式匹配
你当前代码中@RequestMapping注解没有限定请求方法,默认同时支持GET、POST请求,这块不会触发当前报错;如果后续给注解加了method = RequestMethod.POST属性,再用GET方式访问就会报无映射的错误,按需调整即可。 - 检查视图解析器配置
上述配置都没问题的前提下,确认视图解析器配置正确,能匹配你代码中返回的视图名,参考配置:
把prefix值改成你自己存放JSP文件的实际路径,确保<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/view/" /> <property name="suffix" value=".jsp" /> </bean>customer-form.jsp、customer-confirmation.jsp文件存在于对应目录下。
小提示:你贴的processForm方法里return关键字和后面的视图字符串之间没加空格,写成了
return"customer-form",虽然Java编译不会报错,但建议统一加空格写成return "customer-form",避免后续出现不必要的解析问题。
内容的提问来源于stack exchange,提问作者Anjita Kandel
相关产品推荐
相关产品推荐

