ModelAttribute注解

shopxxb2b2c关于发票模块 在开发过程中遇到的知识点
ModelAttribute

此注解的用法分大致的两种
1-用于方法上
2-用于方法的参数上

·在用于方法上时的效果为:
在控制器中每个被GetMapping或者PostMapping注解标注的方法调用前执行被ModelAttribute标注的方法

·在用于方法参数上时的效果为: (此日志主要描述的重点也是此效果)
模型属性首先从Model中获取,若没有获取到,就使用默认构造函数(可能是无参构造,也可能是有参构造)创建模型对象,然后会把ServletRequest请求的数据绑定到之前创建的模型对象中,然后进行Valid校验(若添加有校验注解的话),最后会把属性再次添加到Model里面(再次添加!!!)。


值得一提的是:
前端表单中的数据经过序列化和反序列化提交到后端 会以Object类型进行对象装填 之后进行类型转换(就拿A类来举例,前端表单数据会以Object类进行反序列化 之后进行类型转换为A类)

借shopxxb2b2c中的代码举例说明一些情况:
ModelAttribute(“xxxForm”) Xxx xxx: 此种情况会先从Model中获取以"xxxForm"为key的数据,如果没有则默认构造创建,然后绑定ServletRequest请求的数据,最后把此融合后的对象再次以"xxxForm"的key装填到Model中。
"xxxForm"并不是和前端form表单的id值对应的 只是恰巧一样,而shopxxb2b2c之所以使用"xxxForm"的命名就是要 纯表单值(不带有任何后端的数据) 因为以"xxxForm"为key的Model一般为null(可以说一定为null 因为我们的实体类命名不会以Form结尾 这样就能保证以"xxxForm"为key的来自数据库的Model的值为null 正是纯粹的表单绑定的数据)
在标注了GetMapping或PostMapping的方法参数中,就算不使用ModelAttribute也同样可以获取数据库+表单融合后的对象,因为ModelAttribute在不带参数时会在Model中获取以参数类型第一个字母小写的字符串为key的模型对象(如: User currentUser 则会以"user"字符串为key在Model中获取模型对象)
ModelAttribute(binding = false): 此注解的作用为不绑定从表单中来的数据(为纯数据库数据)

最后补充:
在被ModelAttribute标注的方法中使用model.addAttribute(“xxx”, xxx)方法时 会达到两种效果【1-向Model中注入以"xxx"为key的键值对 用于接下来即将被调用的方法的参数注入提供数据
2-供前端视图使用(${xxx})】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值