带有@ModelAttribute 的变量是否从请求参数中获取?
Does a variable with @ModelAttribute get populated from request parameters?
我对 Spring @ModelAttribute 在方法参数方面的工作的细节感兴趣。
我们知道,当请求的属性在模型中不存在时,它的实例就会被创建并从视图表单中填充。
我的问题涉及表单没有预期属性但这些属性在 URL 模板参数中可用的情况。
我想知道在这种情况下我们的变量是否会填充那些请求参数的值?
例如,像这里一样,变量 attributeToPopulate 是否会使用 URL http://localhost:8080/MyApp/parameter1=whatever?parameter2=whatever?parameter3=whatever 中的参数 1、2、3 填充?:
RequestMapping(method = RequestMethod.GET)
public String fooMethod(@ModelAttribute("attributeName") FooClass attributeToPopulate){
// method implementation
return "view";
}
Spring 文档、参考文档和问答网站均未明确提及此类情况。但是,Stack Overflow 上的 one post 确实提到用 ModelAtribute 注释的变量以这种方式填充(用户 Xelian 的回答):
name="Dmitrij"&countries=Lesoto&sponsor.organization="SilkRoad"&authorizedFunds=&authorizedHours=&
考虑到对该答案的少量赞成票,我有点怀疑,但同时对@ModelAttribute 是否确实以这种方式起作用感到好奇。
任何信息输入将不胜感激。
您可以为 FooClass
中的字段设置默认值,而不是在 RequestMapping
注释中设置它们。在这种情况下,您不必在将 FooClass
用作 ModelAttribute
的所有方法中使用默认值复制粘贴 RequestMapping
。
@tomatefraiche 我试图通过
做到这一点
<spring:url value="/hello?name=default" var="userActionUrl" />
<form:form method="get" modelAttribute="user" action="${userActionUrl}">
<form:input path="name" type="text" disabled="true" />
</form:form>
和
@GetMapping("/hello")
public String hello(@ModelAttribute("user") User user, Model model) {
model.addAttribute("name", user.name);
model.addAttribute("user", user);
return "hello";
}
看起来 Spring 覆盖 url 中的值。在控制器中有一个空值。另外 URL 在表单提交后是 hello?name=
。所以看起来你不能通过 url 设置默认值,因为它将被替换。
我对 Spring @ModelAttribute 在方法参数方面的工作的细节感兴趣。
我们知道,当请求的属性在模型中不存在时,它的实例就会被创建并从视图表单中填充。
我的问题涉及表单没有预期属性但这些属性在 URL 模板参数中可用的情况。 我想知道在这种情况下我们的变量是否会填充那些请求参数的值?
例如,像这里一样,变量 attributeToPopulate 是否会使用 URL http://localhost:8080/MyApp/parameter1=whatever?parameter2=whatever?parameter3=whatever 中的参数 1、2、3 填充?:
RequestMapping(method = RequestMethod.GET)
public String fooMethod(@ModelAttribute("attributeName") FooClass attributeToPopulate){
// method implementation
return "view";
}
Spring 文档、参考文档和问答网站均未明确提及此类情况。但是,Stack Overflow 上的 one post 确实提到用 ModelAtribute 注释的变量以这种方式填充(用户 Xelian 的回答):
name="Dmitrij"&countries=Lesoto&sponsor.organization="SilkRoad"&authorizedFunds=&authorizedHours=&
考虑到对该答案的少量赞成票,我有点怀疑,但同时对@ModelAttribute 是否确实以这种方式起作用感到好奇。
任何信息输入将不胜感激。
您可以为 FooClass
中的字段设置默认值,而不是在 RequestMapping
注释中设置它们。在这种情况下,您不必在将 FooClass
用作 ModelAttribute
的所有方法中使用默认值复制粘贴 RequestMapping
。
@tomatefraiche 我试图通过
<spring:url value="/hello?name=default" var="userActionUrl" />
<form:form method="get" modelAttribute="user" action="${userActionUrl}">
<form:input path="name" type="text" disabled="true" />
</form:form>
和
@GetMapping("/hello")
public String hello(@ModelAttribute("user") User user, Model model) {
model.addAttribute("name", user.name);
model.addAttribute("user", user);
return "hello";
}
看起来 Spring 覆盖 url 中的值。在控制器中有一个空值。另外 URL 在表单提交后是 hello?name=
。所以看起来你不能通过 url 设置默认值,因为它将被替换。