我需要通过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