尚硅谷@ModelAttribute分析笔记

modelAttribute详解 在学习SpringMVC的过程中,关于@ModelAttribute的使用方法一度遇到一些奇怪的问题,在深入研究源码之后,基本上弄清楚了其内部实现的原理。对于自己的理解有误区的地方进行了纠正,现进行总结如下: @ModelAttribute主要有如下两个功能: 1绑定请求参数到实体对象(表单的命令对象):一是将请求参数的输入封装到POJO对象中;二是创建具体实例,以value为键值存储在Model对象中 立即下载

SpringMVC 确定目标方法 POJO 类型入参的过程

  1. 确定一个 key:
    1). 若目标方法的 POJO 类型的参数木有使用 @ModelAttribute 作为修饰, 则 key 为 POJO 类名第一个字母的小写
    2). 若使用了 @ModelAttribute 来修饰, 则 key 为 @ModelAttribute 注解的 value 属性值.
  2. 在 implicitModel 中查找 key 对应的对象, 若存在, 则作为入参传入
    1). 若在 @ModelAttribute 标记的方法中在 Map 中保存过, 且 key 和 1 确定的 key 一致, 则会获取到.
  3. 若 implicitModel 中不存在 key 对应的对象, 则检查当前的 Handler 是否使用 @SessionAttributes 注解修饰,
    若使用了该注解, 且 @SessionAttributes 注解的 value 属性值中包含了 key, 则会从 HttpSession 中来获取 key 所
    对应的 value 值, 若存在则直接传入到目标方法的入参中. 若不存在则将抛出异常.
  4. 若 Handler 没有标识 @SessionAttributes 注解或 @SessionAttributes 注解的 value 值中不包含 key, 则
    会通过反射来创建 POJO 类型的参数, 传入为目标方法的参数
  5. SpringMVC 会把 key 和 POJO 类型的对象保存到 implicitModel 中, 进而会保存到 request 中.

源代码分析的流程

  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 作为参数传递给目标方法的入参.

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析 在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高 阅读详情

相关推荐

ComfyUI-controlnet控制出图

提供加载预处理器节点。

Bu2n的博客 5497

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

COMSOL电弧放电仿真:四场耦合与磁流体建模实战指南

多物理场耦合仿真是现代工程中模拟复杂物理过程的重要手段。电弧本质上是电场、磁场、流场与温度场四场相互耦合的非线性系统,其行为由磁流体力学(MHD)方程描述。通过COMSOL等工具构建电弧模型,可准确预测温度分布、流场结构和电极烧蚀,为开关电器设计、等离子体应用等提供数据支撑。在高压电器开断、电弧切割、激光打孔等工程问题中,高效求解MHD耦合模型是关键。然而,电弧仿真涉及物性参数强非线性、边界条件设置、求解器配置以及移动网格处理等挑战。以二维轴对称电弧模型为例,系统梳理磁流体方程落地、多物理场耦合节点配置、收

weixin_30047059的博客 136

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

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

m0_52675592的博客 276

SAP 凭证分割功能 - 概述&系统配置 - Chapter01/02

为何要进行凭证拆分(分割)?在启用凭证分割之前, 在财务凭证在过账时会自动带出默认的利润中心,这利 润中心一般是从其他对象派生出来的(比如从成本中心、WBS 或资产负债表科 目定义默认的利润中心等),但是某些情况下的财务过账是不会派生出利润中 心的,比如说应收或者应付。如果一笔销售凭证上有两个行项目,10 行对应的成品物料 A 的利润中心为 TPCA-100;公司项目Dr/Cr科目金额利润中心10001Dr应收账款20002Cr库存商品A1500TPCA-1003Cr。

weixin_46525734的博客 3971

告别手动拖拽!PyQt5/PyQt6 QTableView列宽自适应窗口的三种实战方案(附性能对比)

本文详细介绍了PyQt5/PyQt6中QTableView列宽自适应窗口的三种实战方案,包括Stretch模式、resizeEvent手动计算和ResizeToContents模式,并附有性能对比。帮助开发者解决窗口大小变化时列宽不变的常见问题,提升用户体验和开发效率。

weixin_42538752的博客 234

ModelAttribute 源码详解

@ModelAttribute修饰的方法会在执行每个目标方法之前被springMVC调用!  先看例子: 模拟修改操作,原始数据为用户id2,姓名zs,密码pass123,年龄12,默认密码不能被修改,表单回显,模拟操作直接在表单填写对应的属性值 Name: age : 目标方法: @RequestMapping("/testmodelattribute"

Christian_Lee的博客 1857

软件测试学习笔记(二)图覆盖

软件测试学习笔记(二)图覆盖 课程链接软件测试_中国大学MOOC 2.1 测试中的图 2.2 图覆盖准则 1、什么是图? 点的集合和边的集合。点或者结点,有穷非空的集合。边是点对。 2、图为什么在软件测试中具有重要地位? 所谓软件测试就是将软件变作一张图,然后覆盖它,不仅仅是软件,图更是计算机科学重要的结构。 3、软件测试中的图是如何得到的? 常见的图可以来自源代码,常见的是控制流图,还有各种各样...

DZFinder的博客 1422

学习SpringMVC(九)之ModelAttribute源码分析

这里以前一章节的内容对ModelAttribute源码进行分析: 注:同学们可以去看下我的前一讲学习SpringMVC(八)之ModelAttribute 1.首先看下第一阶段的断点情况 还未调用ModelAttribute修饰方法前,map值为{} 调用它之后:map值为从数据库中 并将map键值对放到implicitModel中:

像风一样奔跑 2719

手把手解决GD32H759I-EVAL以太网通信三大坑:IP冲突、端口绑定失败、LWIP内存泄漏

本文针对GD32H759I-EVAL开发板在以太网通信调试中常见的三大难题——IP地址冲突、端口绑定失败和LWIP内存泄漏,提供了详细的实战排障指南。文章深入分析了问题根源,并给出了具体的网络配置、端口管理策略和内存泄漏检测方法,帮助开发者快速定位并解决嵌入式网络通信中的棘手问题,确保系统稳定运行。

weixin_29196315的博客 141

100个Python实战项目(七)实现摩斯密码翻译器

作者主页:海拥 作者简介:优快云全栈领域优质创作者、HDZ核心组成员、蝉联C站周榜前十 粉丝福利:往期获奖记录 每周送6~9本书,不定期送各种小礼品(搪瓷杯、抱枕、鼠标垫、马克杯等) 摩斯密码是一种将文本信息作为一系列通断的音调、灯光或咔嗒声传输的方法,无需特殊设备,熟记的小伙伴即可直接翻译。它以电报发明者Samuel F. B. Morse的名字命名。 算法 算法非常简单。英语中的每个字符都被一系列“点”和“破折号”代替,或者有时只是单数的“点”或“

努力是为了站在万人之中,成为别人的光 1万+

springMVC源码分析--@ModelAttribute使用及运行原理

这一篇博客我们简单的介绍一下ModelAttribute的使用和运行原理。1、首先@ModelAttribute是使用在方法或者上的,当使用在方法上时其作用于本身所在的Controller,在访问Controller中的所有请求时都会执行到@ModelAttribute所注解的方法。@Controller public class ModelAttributeController { @Mo

井底之蛙 5373

02-Redis 核心特性与数据结构详解:揭秘高性能的技术内核

本文深度拆解 Redis 高性能的技术内核:揭秘其凭“内存存储 + C 语言开发” 实现微秒级延迟、10 万 + QPS 的性能优势;详解 5 种基础数据类型(String/Hash 等)与 4 种扩展数据类型(Stream/Geospatial 等)的特性及场景;还介绍多语言支持、RDB/AOF 持久化、主从复制 / 哨兵 / 集群等高可用方案,助读者掌握 Redis 技术核心与实践逻辑。

蜗牛老师,专注编程领域 997

尚硅谷视频springboot源码分析-自定义类型参数处理原理

7.在AbstractNestablePropertyAccessor中的setPropertyValue()获取nestePa,为了解决嵌套属性的情况(比如:person对象中包含一个pet对象,pet对象中有一个name属性,那么我们可以通过pet.name这种方式来将一个名字直接绑定到person中的pet上,与此同时,我们不能再使用person的属性访问器了,而是需要使用pet的属性访问器,这里就是返回pet的属性访问器。

m0_51614605的博客 301

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java培训技术ModelAttribute注解之源码分析

4) SpringMVC 会把 WebDataBinder 的 attrName 和 target 给到 implicitModel. 进。注意: attrName. 若目标方法的 POJO 属性使用了 @ModelAttribute 来修饰,3) SpringMVC 把表单的请求参数赋给了 WebDataBinder 的 target 对应的属性.则 attrName 值即为 @ModelAttribute 的 value 属性值。而传到 request 域对象中.

zjjcchina的博客 359

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java培训技术ModelAttribute注解修饰POJO类型的入参

1). SpringMVC 会使用 value 属性值在 implicitModel 中查找对应的对象, 若存在则会直接传入到目标方法的入参中.2). SpringMVC 会以 value 为 key, POJO 类型的对象为 value, 存入到 request 中.System.out.println(“修改 user=”+user);System.out.println(“从数据库中查询的对象:user=”+user );//模拟从数据库中获取到的user对象。

zjjcchina的博客 598

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java培训技术SpringMVC 输出模型数据概述

org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map 中的数据会自动添加到模型中。

zjjcchina的博客 346

java培训技术ModelAttribute注解

/出现这个异常,是@SessionAttributes(value={“user”},types={String.class})导致的,去掉类上的这个注解。//1. 由 @ModelAttribute 标记的方法, 会在每个目标方法执行之前被 SpringMVC 调用!–测试 @ModelAttribute 类似Struts2框架的模型驱动 –>3.表单回显,模拟操作直接在表单value属性上赋值。1.原始数据为:1,Tom,

zjjcchina的博客 646

java培训技术SpringMVC 确定目标方法 POJO 类型入参的过程

若在 @ModelAttribute 标记的方法中在 Map 中保存过, 且 key 和 1) 确定的 key。则 key 为 POJO 类名第一个字母的小写。一致, 则会获取到.value 属性值.

zjjcchina的博客 376

SpringBoot 学习笔记08之Web开发的请求参数处理的基本注解

注解 @PathVariable、 可以获取path中我们选择自定义的地方的数据 @RequestHeader、 可以获取请求头中的数据 @ModelAttribute、 @RequestParam、 可以获取url的请求参数 @CookieValue、 用于获取cookie的值 @RequestBody 用于获取请求体的数据 @RequestAttribute 获取请求体的值 @MatrixVariable、 用来使用矩阵变量的方法,可以在当cookies禁用的时候使用url拼接jsessionid来获取

Leviathan的博客 841

CSY 主流框架和项目管理复习——SpringMVC

SpringMVC-尚硅谷笔记+自己的一些了解SpringMVC概述SpringMVC 的HelloWorld使用@RequestMapping映射请求面试曾经问过(重点):映射请求参数、请求方法或请求头RESTbug:JSPs only permit GET POST or HEAD总结:映射请求参数& 请求参数请求处理方法签名使用@RequestParam绑定请求参数值 SpringMVC概述 Spring为展现层提供的基于MVC 设计理念的优秀的•Web 框架,是目前最主流的MVC 框架之一S

CSY的博客 813

SpringMVC(5)之 处理模型数据

ModelAndView 类型 在目标中的返回值可以使ModelAndView类型,其中可以包含视图和模型信息,SpringMVC会把ModelAndView的model中数据放到request域对象中。 @RequestMapping("testModelAndView") public ModelAndView testModelAndView() { ModelAndView ...

bubbleTg的博客 254

06.SpringMVC_常用的注解

1.@RequestMapping 用来映射请求的URL该注解可以添加到类上,也可以添加到方法上 @RequestMapping("/springMVC")//该@RequestMapping中的url相对于当前项目的根目录 @Controller //标识当前类是一个控制器(处理器) public class HelloSpringMVC {     /

qq_38333294的博客 213

@ModelAttribute运行流程

@ModelAttribute运行流程: * 1. 执行 @ModelAttribute 注解修饰的方法: 从数据库中取出对象, 把对象放入到了 Map 中. 键为: user * 2. SpringMVC 从 Map 中取出 User 对象, 并把表单的请求参数赋给该 User 对象的对应属性. * 3. SpringMVC 把上述对象传入目标方法的参数. * * 注意: 在 @M...

weixin_33815613的博客 253

Springmvc知识二细节-----@ModelAttribute

@Modelattribute注解 源码分析流程 @Modelattribute与@SessionAttribute同时使用异常

心静、世界就静 3769

Spring MVC @ModelAttribute 源码分析流程

/* *由@ModelAttribute 标记的方法,会在每个目标方法执行前被Spring MVC调用! */ @ModelAttribute public void getUser(@RequestParam(value="id",required = false)Integer id,Map map){ System.out.println("@modelAttribute执行")

code_fighter 博客 290
上一篇: 学习springmvc
下一篇: SpringBoot项目创建
magicproblem
博客等级 码龄7年 22粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值