请求处理底层原理-SpringBoot2控制器方法中的参数是怎么自动解析的

  1. 通过HandlerMapping(处理器映射器)去请求url对应的handler(通过getHander()方法)

    • 举例匹配路径为/url-->>getPerson();

  2. 获取匹配的HandlerAdapter

    • 通过HandlerMapping获取的handler,将4个HandlertAdapter增强for循环遍历得到对应的处理器适配器Adapter(HandlerAdapter一共有四种),通过supports判断是否支持当前Adapter,举例:RequestMappingHandlerAdapter通过判断当前handler是否是HandlerMethod。

    • 4种HandlerAdapter:{RequestMappingHandlerAdapter、HandlerFunctionAdapter、HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter}

  3. 通过Adapter调用Handler()方法,执行控制器方法,返回ModelAndView(此处只讲到方法参数自动解析)

    • 在源码中创建了一个ModelAndView对象mav,通过调用invokeHandlerMethod,来返回ModelAndView对像

    • 进入invokeHandlerMethod会将26个参数解析器和15个返回值处理器放入控制器方法中

    • 通过getMethodArgumentValue方法返回的是一个存放参数值的Object [] args 数组,该数组之后存放参数的值

    • 在getMethodArgumentValue方法中首先获取了我们所有的参数,放到了一个parameters的数组中

    • 遍历循环parameters[ ]得到每一个参数,在通过循环遍历26个参数解析器,查找parameter是否有匹配argumentresolvers(参数解析器),如果匹配到了就放入arguementResovler(缓存)中。

    • 匹配的参数解析器已经存放在缓存中,之后就是从缓存中拿到这个参数解析器,然后通过resolverArgument方法得到对应参数的值arg,并且返回存入到Object [] args 数组中

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值