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

解释此Spring MVC Controller行为

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

解释此Spring MVC Controller行为

好,很多问题。让我们看看,所有引用都是针对当前Spring MVC版本的文档。

1)在你看到的行为

user
属性的部分解释说,“
在一个方法参数使用@ModelAttribute ”

方法参数上的@ModelAttribute指示应从模型中检索参数。如果模型中不存在该参数,则应首先实例化该参数,然后将其添加到模型中。一旦出现在模型中,则应从具有匹配名称的所有请求参数中填充参数的字段。这在Spring
MVC中称为数据绑定,这是一种非常有用的机制,使您不必分别解析每个表单字段。

Spring如何做到这一点?好吧,源代码是最终的答案,但要猜测起来并不难:Spring知道参数是的实例,

User
并且通过反射它可以读取类的方法,特别是其
setter
。在这种情况下,它找到
setUsername()
setEmail()
,这些方法的参数是a,
String
因此它与请求中的参数兼容。

(顺便说一句:

@RequestParam("email") String password
可能是一个错误。至少是令人困惑的)

2)该方法

createUser()
之前带有注释
@ModelAttribute("user")
。这将在“
在方法上使用@ModelAttribute ”部分介绍

方法上的@ModelAttribute指示该方法的目的是添加一个或多个模型属性。

因此,此方法将与名称相关联的对象

"user"
放在模型上,然后可供其他方法用作参数,例如
step()
。注意,注释控制着模型中对象使用的标识符。如果将代码更改为

@ModelAttribute("strangeWeirdIdentifier")private User createUser() { return user; }

该应用程序将中断。但是,如果将

step()
签名更改为

public String step(@ModelAttribute("strangeWeirdIdentifier") User user,        @RequestParam("username") String username,        @RequestParam("email") String password,        @PathVariable() Integer page) {

3)1)和2)中描述的过程在请求期间将对象存储在模型中。使用类注释,

@SessionAttributes("user")
您可以延长对象的寿命,将其添加到当前对象
Session
或等效对象中。例如,您可以在其他
Controller
s中使用与
step()
方法相同的对象。

最后只是要清楚

  • 在问题2中看到的注释发生在问题1中出现的用法之前。
  • 您可能不需要问题3的注释
  • Spring不会将bean映射到Java代码中的名称,而是映射到注释中使用的名称。为了清楚起见,重复与示例中相同的名称并不罕见。

希望这比官方文档更清楚,通常太简短了,我给你。



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

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

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