SpringBoot中请求响应源码解析(寻找合适的适配器以及参数解析)

SpringBoot中请求响应源码解析(寻找合适的适配器以及参数解析),第1张

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个参数

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/799577.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存