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

@ModelAttribute注解使用

1 注释方法

@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。

1.1 注释void返回值的方法


在获得请求 /helloWorld后, populateModelhelloWorld之前被调用,它把请求参数
/helloWorld?abc=text
加入到一个名为 attributeName的model属性中,在它执行后 helloWorld被调用,返回视图名 helloWorld和model已由 @ModelAttribute方法生产好了

这个例子中model属性名称和model属性对象由model.addAttribute()实现
不过前提是要在方法中加入一个Model类型的参数,当URL或者post中不包含此参数时,会报错


其实不需要这个方法,完全可以把请求的方法写成,这样缺少此参数也不会出错


1.2 注释返回具体类的方法

@ModelAttribute
public Account addAccount(@RequestParam String number) {
       return accountManager.findAccount(number);
}复制代码

model属性的名称没有指定,它由返回类型隐含表示,model属性对象就是方法的返回值
如这个方法返回Account类型,那么这个model属性的名称是account

1.3 注释返回具体类的方法


@ModelAttribute注释的value属性,指定model属性的名称
model属性对象就是方法的返回值,无须要特定的参数

1.4 和@RequestMapping同时注释一个方法


该方法的返回值并非表示一个视图名称,而是model属性的值,视图名称由 RequestToViewNameTranslator根据请求 "/helloWorld.do"转换为逻辑视图 helloWorld

Model属性名称由@ModelAttribute(value=””)指定,相当于在request中封装了key=attributeName,value=hi

2 注释一个方法的参数

2.1 从model中获取


@ModelAttribute("user") User user注释方法参数,参数user的值来源于addAccount()方法中的model属性

此时如果方法体没有标注@SessionAttributes("user"),那么scoperequest,如果标注了,那么scopesession

2.2 从Form表单或URL参数中获取(实际上,不做此注释也能拿到user对象)


注意这时候这个User类一定要有没有参数的构造函数

转载于:https://juejin.im/post/5c0ec62c6fb9a049a42ee2b9

相关文章:

  • docker容器内的网络抓包
  • 【linux】linux重启tomcat + 实时查看tomcat启动日志
  • JavaScript基础——基本概念
  • 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Innodb之全局共享内存
  • sql 开窗函数
  • 我的友情链接
  • 实现菜单下拉伸展折叠效果demo
  • Android中的树状(tree)列表
  • 基于MVC思想实现一个简单的贪吃蛇小游戏
  • Device Tree Usage 【转】
  • 从容器到云原生 – 极致弹性
  • 【NetApp】FPolicy的使用流程图
  • Android基础---获取手机硬件数据(转)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 08.Android之View事件问题
  • Akka系列(七):Actor持久化之Akka persistence
  • Apache的80端口被占用以及访问时报错403
  • Github访问慢解决办法
  • Java的Interrupt与线程中断
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • MySQL几个简单SQL的优化
  • Octave 入门
  • PHP面试之三:MySQL数据库
  • vue:响应原理
  • 笨办法学C 练习34:动态数组
  • 动态规划入门(以爬楼梯为例)
  • 多线程事务回滚
  • 理解在java “”i=i++;”所发生的事情
  • 深入 Nginx 之配置篇
  • 小程序测试方案初探
  • 一个JAVA程序员成长之路分享
  • 运行时添加log4j2的appender
  • raise 与 raise ... from 的区别
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (11)MATLAB PCA+SVM 人脸识别
  • (二)JAVA使用POI操作excel
  • (接口自动化)Python3操作MySQL数据库
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十)c52学习之旅-定时器实验
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @selector(..)警告提示
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [AIGC] Java 和 Kotlin 的区别
  • [Android] Android ActivityManager