我有一个带有提交按钮的表单:
<li>
<form id="byConsumes" class="readJsonForm" action="<c:url value="/mapping/consumes" />" method="post">
<input id="byConsumesSubmit" type="submit" value="By consumes" />
</form>
</li>
当我点击提交按钮时,一个创建JSON对象的JQuery函数通过HTTP Post请求传递,以下是JQuery函数的代码:
$("form.readJsonForm").submit(function() {
var form = $(this); // Variabile che si riferisce all'elemento nel DOM che ha scatenato l'evento click (il form)
var button = form.children(":first"); // Seleziona il bottone submit
var data = form.hasClass("invalid") ? // OPERATORE CONDIZIONALE: il form ha classe "invalid" ?
"{ \"foo\": \"bar\" }" : // SI: foo = bar
"{ \"foo\": \"bar\", \"fruit\": \"apple\" }"; // NO: foo= bar ; fruit = apple
/* AJAX CALL PARAMETER:
type: Say to the servlet path, the request is a POST HTTP Request
url: The address to which to send the call
data: the content of my data variable
contentType: an object having JSON format
dataType: the type of content returned by the server
*/
$.ajax({ type: "POST", url: form.attr("action"), data: data, contentType: "application/json", dataType: "text",
success: function(text) { MvcUtil.showSuccessResponse(text, button); },
error: function(xhr) { MvcUtil.showErrorResponse(xhr.responseText, button); }});
return false;
});
我创建并传递的JSON对象由数据变量表示,并包含以下键值对:{ \"foo\": \"bar\", \"fruit\": \"apple\" } 类似于: foo: bar fruit: apple 现在,在我的控制器中,我有处理此请求的方法:
@RequestMapping(value="/mapping/consumes", method=RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String byConsumes(@RequestBody JavaBean javaBean) {
return "Mapped by path + method + consumable media type (javaBean '" + javaBean + "')";
}
对我来说,这种方法很清晰地处理了面向“映射/消耗”路径的HTTP Post请求(仅限POST请求),但是以下内容的含义我不太确定:
consumes=MediaType.APPLICATION_JSON_VALUE: 这到底意味着什么?我认为它告诉Spring该方法接收一个JSON格式的对象,因此可以以某种方式解析...但我不确定,并且在文档中没有找到相关信息。
consumes是什么?是变量还是注释之类的东西?我不理解这些,因为这是@RequestMapping注释的参数,但在谷歌上搜索时,它被用作独立的注释...
在我的byConsumes()方法中,我有以下输入参数:@RequestBody JavaBean javaBean。 根据Spring文档,我理解:@RequestBody方法参数注释指示使用@RequestBody注释将方法参数绑定到HTTP请求体的值。
那么实际上,这意味着什么呢?我的JSON对象在HTTP请求体字段中,使用此注释将其转换为名为javaBean的对象,其类为JavaBean吗?
如果我的判断是正确的...JavaBean类型的对象是什么类型的对象?只包含一些变量及其对应的getter和setter方法的对象吗?(在先前的案例中,一个仅包含两个变量的对象:第一个名为foo,其值为"bar",另一个名为fruit,其值为"apple")
是这样的吗?
非常感谢 Andrea