我是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;); 弹出窗口。
为什么呢?我错过了什么?我该如何解决这种情况?
答案 0 :(得分:1)
因为我看到你错过了两件事。
第一个是Spring Web MVC控制器。您没有通过RequestParam
但RequestBody
。
@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";
}