-6ren">
gpt4 book ai didi

java - 有关在 Spring MVC 中使用 @ModelAttribute 注解方法参数的一些信息

转载 作者:行者123 更新时间:2023-12-02 07:20:35 26 4
gpt4 key购买 nike

我正在研究 Spring MVC Showcase 项目,可从 STS 仪表板下载

我有以下情况,但我不太清楚:

我有以下表格:

<form id="readForm"action="<c:url value="/messageconverters/form" />" method="post">
<input id="readFormSubmit"type="submit"value="Read Form Data"/>
</form>

与具有 id="readForm"的表单的提交操作相关,我有以下 Jquery 函数,该函数只需执行 AJAX 调用,并在请求的正文字段中添加两个已验证的文本变量: **foo=bar 水果=苹果

$("#readForm").submit(function() {
var form = $(this); // Contiene il riferimento all'elemento form submittato

// Contiene il riferimento all'emento input all'interno del form (il bottone)
var button = form.children(":first");

$.ajax({
type: "POST", // Tipo di Request: POST
// URL specificato dall'attributo "action" del form: "/messageconverters/form"
url: form.attr("action"),
// Dati che vengono passati all'interno del campo body dell'HTTP Request, 2 variabili
data: "foo=bar&fruit=apple",

// Tipo di media type accettabile dalla response
contentType: "application/x-www-form-urlencoded",
dataType: "text", // Tipo di dati passato dalla HTTP Request

success: function(text) { // Caso di successo:
MvcUtil.showSuccessResponse(text, button);
},

error: function(xhr) { // Caso di errore:
MvcUtil.showErrorResponse(xhr.responseText, button);
}
});
return false;
});

我的 Controller 类处理此请求的方法如下:

@RequestMapping(value="/form", method=RequestMethod.POST)
public @ResponseBody String readForm(@ModelAttribute JavaBean bean) {
return "Read x-www-form-urlencoded: " + bean;
}

好的,该方法将一个带有 @ModelAttribute 注解的 JavaBean 对象作为输入参数。

查看示例定义的 JavaBean 类:

@XmlRootElement
public class JavaBean {

@NotNull
private String foo;
@NotNull
private String fruit;

public JavaBean() {
}

public JavaBean(String foo, String fruit) {
this.foo = foo;
this.fruit = fruit;
}

// GETTER e SETTER METHOD
}

因此,JavaBeans 包含两个与表单变量同名的属性,这些属性在我提交表单时生成的 HTTP 请求中传递

阅读@ModelAttribute注释文档(http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/bind/annotation/ModelAttribute.html)我发现我可以使用它既可以注释方法,也可以注释方法参数。 p>

我的情况是第二种情况,对于这种情况,我可以阅读:将方法参数或方法返回值绑定(bind)到命名模型属性的注释,公开到 Web View

那么到底是什么意思?

我认为,如果我用这个注释注释一个方法参数,这意味着如果HTTP请求体内传递的变量名称与我注释的对象的变量匹配,Spring会自动复制属性内该变量的值在被注释的对象中具有相同的名称

但我不确定这一点......

有人可以帮助我很好地理解这个东西吗?

Tnx安德里亚

最佳答案

我不这么认为。 @ModelAttribute 与 HTTP 请求参数无关。当您注释方法参数时,例如:

public String foo(@ModelAttribute ("petKey") Pet pet){
}

您将拥有一个来自 Controller 模型对象的“宠物”对象。 Spring 会在 model map 对象中搜索“petKey”。

当你注释你的方法时:

@ModelAttribute ("petKey")
public Pet foo(){
return new Pet;
}

执行方法并从方法返回后,Spring会将“new Pet”作为值,将“petKey”作为model对象中的键( map )。

关于java - 有关在 Spring MVC 中使用 @ModelAttribute 注解方法参数的一些信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14296064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com