我需要通過jQuery.ajax()向Spring MVC控制器URL映射方法發送請求並接收響應;請求和響應數據都是JSON格式。通過jQuery/ajax + JSON將ID和字符串數組傳遞給Spring MVC
Ajax調用會是這樣的:
$.ajax({
url: "/panelsData",
dataType: "json",
data: { "id": 1, "panels": [ "View1", "View2", "View3" ] },
success: function(data) {...}
});
Spring MVC的控制器URL映射方法:
@RequestMapping(value="/panelsData", method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(value=HttpStatus.OK)
@ResponseBody
public List<PanelData> getPanelsDataById(
@RequestParam("id") BigDecimal id,
@RequestParam("panels") List<String> panelsList) {
// Process list of Strings corresponding to panel view names
// and return a list of PanelData objects (in JSON format).
}
我面臨的第一個問題是,客戶端(瀏覽器)失敗,錯誤代碼400 (錯誤的請求)。所以,我在JSON.stringify'ed Ajax調用數組:
data: { "id": 1, "panels": JSON.stringify([ "View1", "View2", "View3" ]) },
這一次,請求成功Spring MVC的好評。但是String值的列表有些不妥。當我檢查的價值觀,這是我看到的:
panelsList[0] = ""[View1""
panelsList[1] = ""View2""
panelsList[2] = ""View3]""
什麼?!我期待這些值:
panelsList[0] = "View1"
panelsList[1] = "View2"
panelsList[2] = "View3"
我錯誤地序列化(或反序列化)的值?鑑於數據交換必須都是JSON,並且我使用的是Jackson庫,我期望從JSON客戶端接收ID和String值列表應該不是那麼困難。我知道Jackson庫的配置是完美的,因爲其他方法返回的JSON響應是正確形成的。
你必須瞭解的第一個和非常重要的事情,如果你是通過從JSON數據,你有相同的數據類型和模式....喜歡這裏我創建的基礎方法簽名json data public PanelData getPanelsDataById(@RequestParam(「id」)BigDecimal id,@RequestParam(「panels」)列表 panelsList) –
Sam
2014-11-14 20:20:48