一、测试环境
springboot+postman。
注意
我是在对springmvc有一定了解的基础上进行分析,有些地方描述的不是很细致,请谅解。
学会debug是程序员的必须课!
控制器
1. @RequestMapping注解
2. 接收参数为普通参数,非json数据
请求详情
查看结果
二、源码分析
打断点
就在控制器打断点。
断点结果和选择入口
从invokeForRequest方法开始寻找源头!
1. invokeForRequest方法作为入口
2. getMethodArgumentValues方法
3. resolveArgument
里面会调用resolveName来获取具体参数值。
resolveArgument方法也会对传进来的参数进行验证。
4. resolveName会调用getParameterValues
从RequestFacade中的getParameterValues(name)来获取参数值
5. 最终会走到Parameters类中的getParameterValues方法
注意:paramHashValues属性值是在tomcat使用Http11Processor解析http请求的时候就已经赋值了!
从Parameters类中获取具体参数值
层层返回数据
最终才到达controller层。
总结
这是我第一次对spring关于请求参数方面的细致了解,描述的不是很清晰。这次全当是记录。有时间会深入了解,再做更加清晰详细的记录。
对于新手小白来说,往往会对一些基本问题困扰。如乱码问题,请求参数接收不到等问题。这些最基本的问题都需要小白们(包括我),一步步的去探索,去解决。在探索和解决的过程中成长!
关于乱码问题:
https://blog.youkuaiyun.com/ITxiaofeixiang/article/details/113182289