Spring MVC @ModelAttribute 源码分析流程

modelAttribute详解 在学习SpringMVC的过程中,关于@ModelAttribute的使用方法一度遇到一些奇怪的问题,在深入研究源码之后,基本上弄清楚了其内部实现的原理。对于自己的理解有误区的地方进行了纠正,现进行总结如下: @ModelAttribute主要有如下两个功能: 1绑定请求参数到实体对象(表单的命令对象):一是将请求参数的输入封装到POJO对象中;二是创建具体实例,以value为键值存储在Model对象中 立即下载
    /*
 *由@ModelAttribute 标记的方法,会在每个目标方法执行前被Spring MVC调用!
 */
@ModelAttribute
public void getUser(@RequestParam(value="id",required = false)Integer id,Map<String, Object> map){
    System.out.println("@modelAttribute执行");
    if(id != null){
        User user =  new User(1, "tom", "123456", "lizhen@edu.cn", 12);
        System.out.println("模拟从数据库中获取对象"+user);
        map.put("user", user);
    }
}
/*
 * 运行流程:
 * 1.执行@ModelAttribute注解修饰的方法:从数据库中取出对象,把对象放入到了Map中,键为:user
 * 2.SpringMVC 从Map中取出user对象,并把表单的请求参数赋给该User对象的对象属性
 * 3.SpringMVC 把上述对象传入目标方法参数。
 * 
 * 注意:在@ModelAttribue 修饰的方法中,放入到Map时的键需要和目标方法入参类型的第一个字母小写的字符串一致!
 */
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User userl){
    System.out.println("修改:"+userl);
    return SUCCESS;
}

源代码分析的流程
* 1. 调用 @ModelAttribute 注解修饰的方法. 实际上把 @ModelAttribute 方法中 Map 中的数据放在了 implicitModel 中.
* 2. 解析请求处理器的目标参数, 实际上该目标参数来自于 WebDataBinder 对象的 target 属性
* 1). 创建 WebDataBinder 对象:
* ①. 确定 objectName 属性: 若传入的 attrName 属性值为 “”, 则 objectName 为类名第一个字母小写.
* 注意: attrName. 若目标方法的 POJO 属性使用了 @ModelAttribute 来修饰,
* 则 attrName 值即为 @ModelAttribute 的 value 属性值
* ②. 确定 target 属性:
* > 在 implicitModel 中查找 attrName 对应的属性值. 若存在, ok
* > *若不存在: 则验证当前 Handler 是否使用了 @SessionAttributes 进行修饰, 若使用了, 则尝试从 Session 中
* 获取 attrName 所对应的属性值. 若 session 中没有对应的属性值, 则抛出了异常.
* > 若 Handler 没有使用 @SessionAttributes 进行修饰, 或 @SessionAttributes 中没有使用 value 值指定的 key
* 和 attrName 相匹配, 则通过反射创建了 POJO 对象
*
* 2). SpringMVC 把表单的请求参数赋给了 WebDataBinder 的 target 对应的属性.
* 3). *SpringMVC 会把 WebDataBinder 的 attrName 和 target 给到 implicitModel.
* 近而传到 request 域对象中.
* 4)把 WebDataBinder 的 target 作为参数传递给目标方法的入参.

Unity2020 发布Android包,下载安装配置JDK、SDK、NDK详细教程 配置成功页面 JDK、SDK、NDK 阅读详情

相关推荐

EPLAN Electric P8 2025安装避坑指南:硬件、.NET 6与VM配置全解析

EPLAN Electric P8 是面向工业自动化电气设计的工程级CAD平台,其核心依赖于.NET运行时、DirectX硬件加速与本地许可证验证机制。随着2025版升级至.NET 6.0 Runtime、DirectX 12渲染引擎及双模授权校验,安装失败率显著上升——尤其在显卡驱动陈旧、虚拟机环境或企业离线场景下。技术价值在于保障PLC柜体布局、端子排自动生成、电缆清册输出等产线级功能稳定运行;典型应用场景包括高校电赛控制系统设计、包装线电控图纸交付及集成商多版本协同部署。本文聚焦EPLAN 2025安

weixin_30897079的博客 560

2021-03-29@ModelAttribute注解源码分析

文章目录运行流程源码分析流程 运行流程 执行@ModelAttribute注解修饰的方法:从数据库中取出对象,把对象放入到Map中,键为:user SpringMVC从Map中取出User对象,并把表单的请求参数赋给该User对象的对应的属性。 SpringMVC把上述对象传入目标方法的参数。 注意:在@ModelAttribute修饰的方法中,放入到Map时的键需要和目标方法入参类型的第一个字母小写的字符串一致。 源码分析流程 调用@ModelAttribute注解修饰的方法,实际上把@ModelA

m0_52675592的博客 276

【移远EG800K-CN】从AT指令到MQTT实战:4G模块云端通信全解析

本文详细解析移远EG800K-CN 4G模块的AT指令应用与MQTT云端通信实战。从硬件连接到网络配置,再到MQTT协议的数据上报与命令接收,提供了完整的物联网通信解决方案,帮助开发者快速实现设备与云端的稳定数据交互。

o1p2q3r的博客 560

Javaweb-Vue-Springboot-前后端分离交互

1. JSON(JavaScript Object Notation) JSON 是一种轻量级的数据交换格式,用来方便的表示对象 //JSON的属性名必须有双引号,如果值是字符串,也必须带双引号 var jsonObj = { "key1":10, //数字 "key2":"name", //字符串 "key3":true, //布尔类型 "key4":[10,"name",true], //数组 "key5":{ //另一个json "key5_1":20,

codfishXY的博客 619

智能座舱-语音交互系统

从什么是智能座舱、智能座舱的发展驱动因素、智能座舱的构成要素三个方面梳理我对智能座舱的基础认识之后,为了加深“智能座舱产品入门”课程中语音交互部分知识的理解,我从什么是语音交互、语音交互的底层技术、智能座舱的语音交互等方面,对智能座舱语音交互系统相关的知识进行了梳理与总结。

GUOSA0928的博客 1442

华南理工大学电子与信息学院23年预推免复试面试经验贴

华南理工大学电子与信息学院23年预推免复试面试经验贴

Scut_Ty的博客 3299

SpringMVC中ModelAttribute源码分析

后台代码 : @SessionAttributes(value= {"user"}, types= {String.class}) @RequestMapping("/springmvc") @Controller public class SpringMVCTest { private static final String SUCCESS = "success"; @Mo...

dingd1234的博客 295

2D激光slam数据集的下载与测试

参考博客: https://blog.youkuaiyun.com/qq_24894159/article/details/81265991 https://blog.youkuaiyun.com/fk1174/article/details/52673413#commentBox 数据集下载与生成 下载数据集 下载网址: http://ais.informatik.uni-freiburg.de/slamevaluation/datasets.php 进去网站后点你想下载的对应的"download log file" 然后你

老李的博客 4026

【源码】Spring validation参数校验原理解析之Controller控制器参数校验中@ModelAttribute及实体类参数校验实现原理

本文从源码角度介绍了Spring MVC方法参数解析器HandlerMethodArgumentResolver及框架中自带的参数解析器及初始化方式流程。分享了ModelAttributeMethodProcessor解析器中参数校验的原理。

JingAi_jia917的博客 1758

安捷伦示波器实战指南:从基础操作到精准触发

本文详细介绍了安捷伦示波器的基础操作与高级功能,包括精准触发配置、波形分析和常见问题排查。通过实战技巧和优化建议,帮助工程师快速掌握示波器的核心功能,提升调试效率。特别适合电子工程师和测试技术人员参考使用。

weixin_30839881的博客 136

基于ADMM的TV正则化最小化稀疏实现图像重建

ADMM算法是一种求解带有约束条件的优化问题的有效方法,它可以将原问题分解成两个子问题,然后交替求解这两个子问题,直到收敛。为了解决这些问题,研究人员提出了许多图像重建方法,其中一种常用的方法是基于正则化的方法。在图像重建中,TV正则化是一种比较常用的正则化方法,可以有效地降低图像的噪声,并保持图像细节特征。通过本文的介绍和源代码的演示,我们可以看出基于ADMM的TV正则化最小化稀疏实现图像重建的方法是一种简单、高效、有效的图像重建方法,能够在一定程度上提高图像质量,对于实际应用具有一定的参考意义。

学习使你进步。 1762

深入SpringMVC-MoelAttribute

ModelAttribute @ModelAttribute注解用于将请求的参数绑定到Model对象中,方便在前台回显 在方法定义上使用@ModelAttribute注解:SpringMVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribue的方法 在方法入参前使用@ModelAttribute注解: @ModelAttribute注解一个方法 @ModelAttri...

追梦的小狼狗 248

099、LLC谐振变换器的大信号建模

摘要:LLC谐振变换器的小信号模型在大信号工况(如启动、负载突变)下会失效,导致保护失灵、过冲等问题。通过状态空间平均法和分段线性化建立大信号模型,需关注谐振腔能量转移、模态切换条件及离散化实现。实际应用中,该模型可优化启动策略、精确设定保护阈值并验证环路补偿,但需注意变压器饱和等非线性因素。经验表明,大信号建模能显著提升设计可靠性,但需结合实验验证(误差<15%)和工具适配(如MATLAB离线仿真与C语言嵌入式调试)。三颗炸裂的MOSFET警示:深入掌握大信号建模是避免关键故障的必要手段。

Jack010169的博客 47

06-HandlerAdapter

文章目录HandlerAdapter一、HandlerAdapter1.1 HandlerAdapter设计思想?1.2 接口定义1.3 初始化 HandlerAdapter1.4 获取 HandlerAdapter二、HandlerAdapter 继承体系2.1 AbstractHandlerMethodAdapter2.2 SimpleControllerHandlerAdapter2.3 H...

my_momo_csdn的博客 846

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring MVC @ModelAttribute 详解

1.@ModelAttribute注释void返回值的方法 @Controller public class HelloModelController { @ModelAttribute public void populateModel(@RequestParam String abc, Model model) { model.addAttribu

何静媛 4万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

spring学习之@ModelAttribute运用详解

@ModelAttribute使用详解 1.@ModelAttribute注释方法     例子(1),(2),(3)类似,被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。         (1)@ModelAttribute注释void返回值的方法

编程人生 34万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring MVC @ModelAttribute详解

如果配置了一个可以将String类型的账户值转换成Account类型实例的转换器Converter,那么上面这段代码就可以工作的很好,而不需要再额外写一个@ModelAttribute方法。@ModelAttribute方法通常被用来填充一些公共需要的属性或数据,比如一个下拉列表所预设的几种状态,或者宠物的几种类型,或者去取得一个HTML表单渲染所需要的命令对象,比如Account等。@ModelAttribute标注既可以被用在方法上,也可以被用在方法参数上。...

daobuxinzi的博客 9628

Spring MVC 核心调用流程

所在类:org.springframework.web.servlet.mvc.method.annotation.所在类:org.springframework.web.servlet.mvc.method.annotation.所在类:org.springframework.web.servlet.mvc.method.annotation.所在类:org.springframework.web.servlet.mvc.method.annotation.

埃泽漫笔 1184

Spring MVC @ModelAttribute注解

本文介绍在 Spring MVC 中非常重要的注解 @ModelAttribute,用来将请求参数绑定到 Model 对象。 在 Controller 中使用 @ModelAttribute 时,有以下几种应用情况。 应用在方法上 应用在方法的参数上 应用在方法上,并且方法也使用了 @RequestMapping 需要注意的是,因为模型对象要先于 controller 方法之前创建,所以被 @ModelAttribute 注解的方法会在 Controller 每个方法执行之前都执行。因此一个 Control

洛卡JAVA架构师每日分享Java架构师知识 935

spring mvc:@ModelAttribute的作用

@ModelAttribute该注解有两个用法,一个是用于方法上,一个是用于参数上;用于方法上时:  通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;用于参数上时: 用来通过名称对应,把相应名称的值绑定到注解的参数bean上;要绑定的值来源于:A) @SessionAttributes 启用的attribute 对象上;B) @ModelAttribute ...

happydecai的博客 1974

Spring3MVC 在JSP中使用@ModelAttribute--源自技术

在教程中,我们将创建一个简单的Spring3MVC simple CRUD应用程序.  什么是@ModelAttribute  Spring3关于@ModelAttribute的文档 (http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib)

MyJava_Dx的博客 5363

Spring MVC中@ModelAttribute注解(6)

Spring MVC中@ModelAttribute注解绑定请求参数到实体对象(表单的命令对象)注解一个非请求处理方法 绑定请求参数到实体对象(表单的命令对象) @RequestMapping("/register") public String register(@ModelAttribute("user") UserForm user) { if ("zhangsan".equals(uname) && "123456".equals(upass)) { logg

zhanghw的博客 338

Spring3MVC 在JSP中使用@ModelAttribute

在教程中,我们将创建一个简单的Spring3MVC simple CRUD应用程序.  什么是@ModelAttribute  Spring3关于@ModelAttribute的文档  引用 @ModelAttribute has two usage scenarios in controllers. When you place it on a method para

xiaozaoxi的专栏 1466

[Spring MVC]之@ModelAttribute注解的用法

注解方法 在同一个控制器中,注解了@ModelAttribute的方法实际上会在@RequestMapping方法之前被调用。 注解无返回值方法 import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.a...

qq_42777577的博客 270
上一篇: Spring MVC 之 @ModleAttribute
下一篇: SpringMVC 确定目标方法 POJO 类型入参的过程
jeffery0628
博客等级 码龄11年 39粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值