SpringBoot中参数解析器和返回值种类有很多,分析源码得到参数解析器尤其重要,本文章以传pojo类型参数为例,带你梳理源码中参数解析器到底在哪
一、定义接口
图中为已定义的接口,下面我们用此接口来演示传参过程
二、找到spring.factories
如图所示,再导入的依赖包中找到org.springframework.boot:spring-boot-autoconfigure:包,打开包下的META-INF文件夹中的spring.factories(如没有此文件,找后缀为。ico的文件打开)
打开后可以看见引入了许多类
ctrl+f打开搜索功能,找到DispatcherServletAoutoconfiquration,ctrl+鼠标左键进入
进入后找到@ConditionalOnclass的类DispatcherServlet,ctrl+鼠标左键进入
进入后ctrl+f打开搜索功能,找到doDispatch方法,方法中找到mv = ha.handle这一行,打上断点
三、启动项目
debug启动项目,此时运行到断点处,步入
步入
到此处为步过
步过至mav = this.invokeHandlerMethod(request, response, handlerMethod).这一行,步入
步过
步过至两个if判断结束后,我们可以看到,StringBoot提供的参数参数解析器有26种,而返回值种类有15种
再次步过很久(此时代码为一些基本配置),直到invocableMethod.invokeAndHandle(webRequest, mavContainer, new 0bject[0])这行代码,步入
再次步入
步入
步过
一直步过至try中,步入
此时的 resolver就是我们的参数解析器了
步过到下面,查看解析器
此时就得到传入参数为pojo类型,SpringBoot所用的参数解析器类型了