加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 方法参数级别的@ModelAttribute注释是什么意思?

发布时间:2020-12-14 06:05:12 所属栏目:Java 来源:网络整理
导读:Spring 3参考资料告诉我们: When you place it on a method parameter, @ModelAttribute maps a model attribute to the specific, annotated method parameter 我不明白这个魔法咒语,因为我确定模型对象的别名(如果使用ModelMap作为返回类型的键值)在执行
Spring 3参考资料告诉我们:

When you place it on a method
parameter,@ModelAttribute maps a
model attribute to the specific,
annotated method parameter

我不明白这个魔法咒语,因为我确定模型对象的别名(如果使用ModelMap作为返回类型的键值)在执行请求处理程序方法后传递给View.因此,当请求处理程序方法执行时,模型对象的名称无法映射到方法参数.

为了解决这个矛盾我去了stackoverflow并找到了this详细的例子.
例子的作者说:

// The “personAttribute” model has
been passed to the controller from the
JSP

看来,他被Spring引用所吸引……

为了消除魅力,我在我的环境中部署了他的示例应用程序,并从方法MainController.saveEdit()中残留地剪切了@ModelAttribute注释.结果应用程序无需任何更改即可运行!所以我的结论是:将Web表单的字段值传递给参数的字段不需要@ModelAttribute注释.然后我坚持这个问题:@ModelAttribute注释的意思是什么?如果唯一的意思是在View中为模型对象设置别名,那么为什么这种方式比将对象显式添加到ModelMap更好呢?

解决方法

关键是@ModelAttribute是可选的 – 如果参数没有注释且它的类型没有特殊含义(即它不是HttpServletRequest,ModelMap等),它被视为@ ModelAttribute-annotated参数.

因此,在两种情况下有效地需要@ModelAttribute:

>指定属性的名称.如果省略@ModelAttribute或具有空值,则使用默认名称(带有第一个字母decapitalized的参数的类型名称).
>如果参数的类型具有特殊含义.例如,如果您的域对象作为属性传递扩展java.security.Principal,则需要对其进行注释,否则Spring将传递HttpServletRequest.getUserPrincipal()的结果.

有些人倾向于在没有实际需要的情况下使用@ModelAttribute来记录参数的含义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读