SpringBoot中请求响应源码解析(寻找合适的handler)
上文通过源码明白如何寻找handler(Controller method),本文继续深入讲解后续操作即为handler寻找对应的handler适配器

1、了解HandlerAdapter

HandlerAdapter是一个接口,有两个函数
一个是supports(Object),返回类型是boolean,判断适配器是否适配对应的handler。
另一个是handle,正式执行并返回ModelAndView.
在该断点处 step into查看有哪些适配器以及如何找到适配器

四种适配器

0、RequestMappingHandlerAdapter:该适配器支持方法上带注解@RequestMapping
1、HandlerFunctionAdapter:该适配器支持函数式编程的xxxxx
2与3很少用到,未深入理解。
经过上述遍历匹配将返回合适的HandlerAdapter到ha
2、执行目标方法
找到HandlerAdapter后调用handle方法正式执行,下一个断点定位到此处,查看如何执行目标方法。

在断点处step into进入

step into

step into

参数解析器(我这版本的springBoot中共27种)
举例:如果是第0号的RequestParamMethodArgumentResolver,该解析器用于解析handler中用@RequestParam修饰的参数。

返回值处理器(我这版本的有15个)
举例:如果返回类型是ModelAndView则用下标为0的处理器

当参数全部封装完毕后,定位到下图中的代码,并step into

step into后进入下图代码段,invokeForRequest()用于请求处理


在handler中打断点后重新debug,可以发现invokeForRequest()执行后进入handler中的断点,因此可以断定,invokeForRequest()就是处理请求的方法。在invokeForRequest()上step into

在该断点处step into

解析后的参数值如下:

对应handler中的8个参数

1080

被折叠的 条评论
为什么被折叠?



