jquery - 通过 jQuery/ajax+JSON 将 ID 和字符串数组传递给 Spring MVC

标签 jquery ajax json spring-mvc

我需要通过 jQuery.ajax() 将请求发布到 Spring MVC Controller URL 映射方法并接收响应;请求和响应数据都是JSON格式。

Ajax 调用将是这样的:

$.ajax({
    url: "/panelsData",
    dataType: "json",
    data: { "id": 1, "panels": [ "View1", "View2", "View3" ] },
    success: function(data) {...}
});

Spring MVC Controller 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(错误请求)。因此,我在 ajax 调用中对数组进行了 JSON.stringify:

data: { "id": 1, "panels": JSON.stringify([ "View1", "View2", "View3" ]) },

这一次,Spring MVC 成功接收到了请求。但是字符串值列表出了问题。当我检查这些值时,我看到的是以下内容:

panelsList[0] = ""[View1""
panelsList[1] = ""View2""
panelsList[2] = ""View3]""

什么?!我期待这些值:

panelsList[0] = "View1"
panelsList[1] = "View2"
panelsList[2] = "View3"

我是否错误地序列化(或反序列化)值?鉴于数据交换必须全部为 JSON,并且我正在使用 Jackson 库,我预计以 JSON 格式从客户端接收 ID 和字符串值列表应该不会那么困难。我知道 Jackson 库配置是完美的,因为其他方法返回的 JSON 响应格式正确。

最佳答案

我认为如果您可以像下面这样重构代码会更好。

您可以创建包含面板 ID 和列表的 PanelDataJson 类,而不是在单独的参数中传递/接收它们。

class PanelDataJson{
    BigDecimal id;
    List<String> panelsList;

     //Getter and Setter

}

然后像下面这样改变你的方法。

@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(
         @RequestBody PanelDataJson) {

    // Process list of Strings corresponding to panel view names
    // and return a list of PanelData objects (in JSON format).
}

从你的前端,只需字符串化你的整个数据,而不是部分数据。

$.ajax({
    url: "/panelsData",
    dataType: "json",
    data: JSON.stringify({ "id": 1, "panels": [ "View1", "View2", "View3" ] }),
    type: "POST",
    contentType : 'application/json; charset=utf-8',
    success: function(data) {...}
});

关于jquery - 通过 jQuery/ajax+JSON 将 ID 和字符串数组传递给 Spring MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26937368/

相关文章:

ios - JSON 解码器 Swift 的潜在错误

javascript - PHP、Javascript、选择和警报

c# - Telerik DatePicker ID 与部分 View 冲突

javascript - 尝试登录到express和node.js内置的身份验证系统时出现404错误(文件未找到)

sql-server - 如何将带时区的 JSON 日期转换为 SQL Server 日期时间?

javascript - 迭代内部数据: [ ] in javascript

php - jquery将变量传递给php文件

javascript - 从内部函数访问本地对象属性(Javascript)

ajax - 如果字段未通过验证条件,如何强制触发 Wicket "onchange"AJAX 事件

jquery - 我可以在中止前一个 ajax 请求后立即启动新的 ajax 请求吗?