当前位置: 首页 > article >正文

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参数值。


http://www.kler.cn/a/577763.html

相关文章:

  • 华为eNSP:实验 OSPF单区域
  • 4.归一化技术:深度网络中的关键优化手段——大模型开发深度学习理论基础
  • 2025-03-08 学习记录--C/C++-C 语言 判断一个数是否是完全平方数
  • Naive UI 更换主题颜色
  • 《安富莱嵌入式周报》第351期:DIY半导体制造,工业设备抗干扰提升方法,NASA软件开发规范,小型LCD在线UI编辑器,开源USB PD电源,开源锂电池管理
  • LDR6500 PD 协议芯片的运用场景
  • uniapp 自定义地图组件(根据经纬度展示地图地理位置)
  • Web开发-PHP应用Cookie脆弱Session固定Token唯一身份验证数据库通讯
  • windows 平台如何点击网页上的url ,会打开远程桌面连接服务器
  • 第十二届蓝桥杯 异或数列
  • 【大模型理论篇】--Mixture of Experts架构
  • C语言学习笔记-进阶(6)字符串函数2
  • 2025-03-08 学习记录--C/C++-PTA 习题10-3 递归实现指数函数
  • 解决电脑问题(2)——主板问题
  • skynet简单游戏服务器的迭代
  • CCF-GESP Python一级考试全解析:网络协议+编程技能双突破
  • QT快速入门-信号与槽
  • 2025年LVS的NAT和DR模型工作原理,并完成DR模型实战!
  • 江协科技/江科大-51单片机入门教程——P[5-1] 模块化编程 P[5-2] LCD1602调试工具
  • 《机器学习数学基础》补充资料:描述性统计