栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring MVC:请解释@RequestParam和@ModelAttribute之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring MVC:请解释@RequestParam和@ModelAttribute之间的区别

@RequestParam
只填充独立变量(当然可能是
@ModelAttribute
类中的字段)。完成控制器后,这些变量将被丢弃,除非将它们输入到模型中。

不要将“模型”一词与会话混淆。http对话通常是:

HTTP.GET
,服务器响应,然后HTTP.POST。当
@ModelAttribute
使用注释时,你总是在构造一个已注释内容的实例,这就是让你认为“向模型提供内容”可能会使变量存在的原因。这是不正确的,一旦
HttpServletRequest
完成,这些变量就不应再成为浏览器/服务器对话的一部分,除非它们已保存在会话中。

@ModelAttribute
填充类的字段,然后填充类的属性以传递回视图

是! 正确地说,是让

@ModelAttributeSpring
使用其默认的Web数据绑定器来填充来自的数据的实例
HttpServletRequest
。选择将此数据传递回视图取决于程序员。当你使用注释方法时
@ModelAttribute
,每次代码访问该servlet时都会调用该方法。当你拥有
@ModelAttribute
方法的参数之一时,我们正在谈论传入的Http表单数据绑定。

Calling

@RequestParam
是说话的捷径
request.getParameter("foo")
; 在幕后,
Java HttpServletRequest
允许你通过执行key-> value查找来从请求对象获取值。返回的值是对象类型。如果你不使用Web应用程序中的Spring,这将是你要键入的内容。

当你开始使用Spring时,Spring将使这一抽象更进一步

@ModelAttribute
。该注释采用了数据绑定的概念。数据绑定的目标是
request.getParameter("foo1")
,对于每个表单元素,控制器中的代码都不必调用。假设你有一个包含5个字段的Web表单。如果没有数据绑定,程序员必须手动检索并验证每个字段。程序员必须确保请求包含该属性,该属性的值存在,并且该属性的值是每个字段期望的类型。使用可以
@ModelAttribute
告诉Spring为你完成这项工作。

如果你使用注释控制器中的方法,则

@ModelAttribute("fooBar") FooBar fooBar
的实例FooBar将始终由Spring构造并提供给你的方法。数据绑定起作用的地方是在方法的参数中使用此注释时;Spring查看的实例,看看
HttpServletRequest
它是否可以将请求中的数据与的实例上的right属性进行匹配
FooBar
。这是基于Java属性约定的,在该约定中,你有一个诸如
foo
和的字段,它们分别是和公共获取器和设置器,称为
getFoo
setFoo
。这看起来似乎很神奇,但是如果你违反约定,那么Spring数据绑定将停止工作,因为它无法从你的位置知道将数据绑定到何处
HttpServletRequest
FooBar
,但不会将属性设置为请求中的任何值。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391568.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号