SpringBoot知识点及其源码解析(3)

目录

源码解析

请求参数解析原理

获取处理器适配器

开始适配处理

源码解析

@RestController
public class ParamController {
    @RequestMapping("user/{userId}/num/{num}")
    public @ResponseBody String testParam(@PathVariable("userId") String userId,
                                          @PathVariable("num") Integer num) {
        return "userId: " + userId + ", num: " + num;
    }
}

为什么这样去写,springboot就能把前台的参数接收

请求参数解析原理

获取处理器适配器

回到DispatcherServlet.class的doDispatch方法,它是专门拦截用户请求的,其中this.getHandler是通过处理器映射器帮助进行请求处理,返回一个mapperHandler,具体原理讲解,这里不在细讲。

这个mapperHandler被HandlerExecutionChain进行一层包装,然后交给处理器适配器进行进一步的处理。本方法(doDispatch)的HandlerAdapter ha = this.getHandlerAdapter(mappedHandler.getHandler());就是来进行获取处理器适配器的。来看下这个方法(图解)

为什么实现了HandlerAdapter接口就可以了呢?继续看下图:

 总结:获取处理器适配器ha成功

开始适配处理

 对handle进行处理,返回值是ModelAndView

 handleInternal内部调用invokeHandlerMethod方法,有三个参数,请求,相应以及处理方法。

 在invokeHandlerMethod方法中,首先是获取参数解析器课返回值处理器,然后在进行处理。

开始进行处理
 进入invokeAndHandle方法,

这里是PathVariable是因为代码中使用的@PathVariable注解

 

resolveArgument执行完毕,返回arg数组

总结:首先获取handler,获取后需要处理器和解析器进行处理,获取处理器和适配器成功后调用handle放进行处理,里面拿到参数解析器和返回值处理器,进行循环27个参数解析器,获取最适合解析的参数解析器,看参数是否存在某个注解,其中的@PathVariable是将参数放到map集合中,key是参数名称,通过key寻找value参数值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值