我正在學習從STS儀表板下載的Spring MVS Showcase。我學習Spring如何將請求映射和我有一些問題要了解以下的事情:如何在Spring MVC中映射JSON對象?
我有這樣的形式提交按鈕:
<li>
<form id="byConsumes" class="readJsonForm" action="<c:url value="/mapping/consumes" />" method="post">
<input id="byConsumesSubmit" type="submit" value="By consumes" />
</form>
</li>
當我點擊提交按鈕jQuery的功能一個創建JSON目的通過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對象我已創建並通過由數據變量表示,並且包含以下項\值:{\ 「福\」:\ 「欄\」,\ 「水果\」:\ 「蘋果\」}
喜歡的東西:
富:酒吧
水果:蘋果
現在,在我的控制器我有一個處理此請求的方法:
@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請求),但我不知道有關以下項目的含義:
消耗=的MediaType .APPLICATION_JSON_VALUE:這到底意味着什麼?我認爲它告訴Spring,這個方法接收一個JSON格式的對象,所以它可以用某種方式解析...但我不確定它,但我沒有在文檔中找到它。
什麼是消耗?一個變量或類似註釋?我不理解的事情,因爲這是@RequestMapping註解的參數,但搜索在谷歌表示它是作爲一個獨立的註釋......
在我byConsumes()方法,我有以下輸入參數:@RequestBody JavaBean javaBean。 閱讀Spring文檔我明白:@RequestBody方法參數註釋表示使用@RequestBody註釋方法參數應該綁定到HTTP請求正文的值。
所以在實踐中,這件事意味着我有我的JSON對象在我的HTTP請求正文字段中,並使用此註釋我將它轉換爲具有類JavaBean的名爲javaBean的對象?
如果我的肯定是真的......什麼樣的對象是JavaBean類型的對象?一個只包含許多變量和相應的getter和setter方法的對象? (在previus情況下只包含兩個可變的對象:第一個名爲foo和具有值「欄」,第二個具有名稱水果和具有值「蘋果」)
是不是
非常感謝您 安德烈
非常感謝您對我們的優秀解釋!現在對我來說都很清楚:-) – AndreaNobili