记一次did not find handler method问题

前题:拷贝已有的项目,删除多余的配置文件,然后启动项目。

问题:访问路径时始终返回404。

解决方案:把包扫描的两个配置写在一起!

	<context:component-scan base-package="com.pro" />

	<mvc:annotation-driven />

确定了web中的dispatch配置、spring的context:component-scan、Controller的注入类引用是否正确。因为这些配置比较普遍,就那么几个单词,但是怎么都不对,非常不明白,为什么就是不行。

百度了很多,这里吐槽一下百度,搜出来都是一样的东西。

接下来就只能自己调试了。先打断点,确定在项目启动的时候加载了Controller,但是看控制台输出没有加载方法。

然后从dispatch开始调试,发现AbstractHandlerMethodMapping中的registerHandlerMethod方法没有执行。因此确定是扫描包配置出了问题。

DispatcherServlet 继承FrameworkServlet,通过FrameworkServlet的doGet方法,执行doService方法,DispatcherServlet中doDispatch方法中调用getHandler方法=>getHandlerExecutionChain方法=>getLookupPathForRequest方法:

getLookupPathForRequest中在这里获取是否有项目中可以跳转的路径:

List<T> directPathMatches = this.urlMap.get(lookupPath);

而urlMap是一个final变量:

private final MultiValueMap<String, T> urlMap = new LinkedMultiValueMap<String, T>();

因此搜索到给urlMap添加值的方法:registerHandlerMethod

但是这个方法却没有执行,因此肯定配置有问题,重新找了一遍,推测了一下,原本的配置是包扫描放在Application中,注入放在另外一个文件中,决定把包扫描的两个配置写在一起。再次重启项目,居然成功了!

	<context:component-scan base-package="com.pro" />

	<mvc:annotation-driven />

 

转载于:https://my.oschina.net/wuyizhong/blog/1830417

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: “did not find handler method for” 的意思是“没有找到处理程序方法”。这通常是因为程序中缺少相应的处理程序方法或者处理程序方法的名称或参数不正确。需要检查程序代码并修复错误。 ### 回答2: "Did not find handler method for"是指在调用某个接口时,系统没有找到相应的处理方法。在使用Spring MVC框架时,通常会在控制器中定义一些处理方法(handler method),用于响应用户请求。如果在调用接口时,系统无法找到对应的处理方法,就会抛出"Did not find handler method for"的异常。 造成这种异常的原因可能有几种。首先,可能是因为请求的URL路径与控制器中定义的路径不符合。例如,请求的路径是"/user/add",但控制器中定义的路径是"/user/register",导致系统无法找到相应的处理方法。 其次,可能是因为请求的HTTP方法与控制器中定义的方法不一致。例如,控制器中定义的方法是POST方法,但实际请求使用了GET方法,导致系统找不到相应的处理方法。 最后,可能是因为控制器中没有定义与请求对应的处理方法。在使用Spring MVC框架时,控制器中定义的处理方法需要与请求的路径和HTTP方法对应。如果控制器中没有定义与请求对应的处理方法,就会抛出"Did not find handler method for"异常。 为了解决这种异常,我们可以做以下几点: 1.检查请求的路径和HTTP方法是否与控制器中定义的处理方法对应。 2.检查控制器中是否定义了与请求对应的处理方法。如果没有定义,需要在控制器中添加相应的方法。 3.检查请求是否符合业务逻辑。如果请求不符合要求,需要调整请求参数或重新设计请求接口。 通过以上措施,我们就可以避免"Did not find handler method for"异常的发生,并保证系统的稳定性和可靠性。 ### 回答3: "Did not find handler method for"是一个错误的提示,通常是由于在编写代码时没有正确设置请求映射或请求参数的原因引起的。在Web应用程序中,处理程序方法负责处理特定HTTP请求,并返回相应的响应。 例如,在Spring MVC中,控制器类的每个方法都应该与一个@RequestMapping注释相关联,以便当请求到达时可以正确地调用该方法。如果没有设置正确的请求映射,则会出现“did not find handler method for”错误。 此外,还可能会发生请求参数不匹配的情况。如果请求中包含的参数与方法的参数不匹配,则无法正确调用处理程序方法,从而导致“did not find handler method for”错误。 解决此错误的方法是仔细检查代码,并确保已正确设置请求映射和请求参数。还可以启用调试模式,以便更轻松地诊断错误并定位问题。在处理程序方法中添加日志录器也是一种有效的方法,可以录请求和响应详细信息,以便更好地理解问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值