如何正确处理将数组发送到Spring MVC控制器方法的AJAX请求?为什么它无法运作?

时间:2015-09-30 10:22:27

标签: java jquery ajax spring spring-mvc

我是Spring MVC中的新手,我在尝试处理向控制器方法发送int数组的AJAX请求时遇到以下问题。

所以我有以下情况。我有这个JQuery函数:

// It is global and it is initiazilized by another function:
var checkedRowList = new Array();

// SOME OTHER CODE THAT INIZIALIZED THE checkedRowList array here
...............................................
...............................................
...............................................

$('#validaButton').click(function() {

    alert("validazione");
    alert("CHECKED ROWS: " + checkedRowList.length);
    alert(checkedRowList[0]);

    $.ajax({
        type: "POST",
        data: {'checkedRowList' : checkedRowList},
        url: "validaProgetti"
    }).done(function(response) {
        alert("SUCCESS");

    }).error(function(xhr) {
        alert("ERROR");
        manageError(xhr);
    });

});

所以 checkedRowList 已正确初始化(我检查过)并使用 ajax()函数将其发送到 validaProgetti 资源使用 POST 请求。

然后进入一个控制器类,我有这个方法必须处理上一个请求:

@RequestMapping(value = "validaProgetti", method=RequestMethod.POST)
public String validaProgetti(@RequestParam List<Integer> checkedRowList,  Model model, HttpServletRequest request) {

    System.out.println("Numero progetti da validare: " + checkedRowList);

    return "blablabla";
}

您可以看到它处理对 validaProgetti 资源的HTTP Post请求。在其中我已指定 RequestParam List checkedRowList 来重试AJAX请求传递的数组。

但它不起作用,因为当执行AJAX请求时,它不会进入 validaProgetti()方法并显示警报(&#34) ; SUCCESS&#34;); 弹出窗口。

为什么呢?我错过了什么?我该如何解决这种情况?

2 个答案:

答案 0 :(得分:1)

因为我看到你错过了两件事。  第一个是Spring Web MVC控制器。您没有通过RequestParamRequestBody

@RequestMapping(value = "validaProgetti", method=RequestMethod.POST)
public @ResponseBody String validaProgetti(@RequestBody List<Integer> checkedRowList) {

    System.out.println("Numero progetti da validare: " + checkedRowList);

    return "blablabla";
}

第二个与您的Ajax请求有关。您应该发送格式为JSON的javascript数组。这是通过函数JSON.stringify()完成的,该函数将js值转换为json

$('#validaButton').click(function() {

    alert("validazione");
    alert("CHECKED ROWS: " + checkedRowList.length);
    alert(checkedRowList[0]);

    $.ajax({
        type: "POST",
        data: JSON.stringify(checkedRowList),
        url: "validaProgetti",
        contentType:"application/json"
    }).done(function(response) {
        alert("SUCCESS");

    }).error(function(xhr) {
        alert("ERROR");
        manageError(xhr);
    });

});

答案 1 :(得分:-2)

在java代码中定义时,您也可以更改请求映射。由于它是相对路径,在某些情况下会令人困惑。

@RequestMapping(value = "/validaProgetti", method=RequestMethod.POST)
public @ResponseBody String validaProgetti(@RequestBody List<Integer> checkedRowList) {

    System.out.println("Numero progetti da validare: " + checkedRowList);

    return "blablabla";
}