Spring MVC 对于@ModelAttribute 、@SessionAttributes 的详细处理流程

初学 Spring MVC , 感觉对于 @ModelAttribute 和 @SessionAttributes 是如何被Spring MVC处理的,这一流程不是很清楚,

经过Google资料,有了一个较为详细的了解,在此总结一下。

 

1)Spring MVC 在调用处理方法之前,在请求线程中自动的创建一个隐含的模型对象。

2)调用所有方法级的 标注了 @ModelAttribute 的方法,并将方法返回值添加到隐含的模型对象中。

3)如果方法所在的控制器 (标记 @Controller的类)没有标记 @SessionAttributes("sessionXXX") 注释,则该处理步骤可跳过。

查看Session 中是否存在 sessionXXX 属性,如果有,将其添加到隐含的模型对象中。如果隐含的模型对象中已经存在了sessionXXX属性,则其值将会被覆盖

 

以下的步骤是针对 标记@ModelAttribute("xxx") 方法入参 的

4)如果隐含的模型对象已经存在xxx属性,则将其赋值给入参,并将用户的请求消息 赋值给入参的相应属性 (PS:支持级联属性),并返回,以下的处理步骤不再进行。

5)如果 方法所在的控制器、标记了 @SessionAttributes("xxx") 注释,则继续进行该处理步骤,否则直接进入步骤6。

查找 Session,如果没有找到 xxx 属性,则抛出异常 HttpSessionRequiredException 。

如果找到则将其赋值给入参,并将用户的请求消息 赋值给入参的相应属性 (PS:支持级联属性),并返回,以下的处理步骤不再进行。

6)创建入参实例,并将其赋值给入参,并将用户的请求消息 赋值给入参的相应属性 (PS:支持级联属性)。至此,处理完毕。

 

 

 

 

 

 

posted @   把爱延续  阅读(16049)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示