一、测试环境
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
SpringBoot请求参数解析流程详解
本文详述了SpringBoot中控制器如何处理非JSON参数,从`@RequestMapping`注解开始,通过`invokeForRequest`、`getMethodArgumentValues`、`resolveArgument`和`getParameterValues`等方法层层深入,解析请求参数的过程。作者强调学会debug的重要性,并提到新手常遇到的乱码问题解决方案,鼓励读者在实践中不断探索和成长。
3228

被折叠的 条评论
为什么被折叠?



