我正在尝试使用spring mvc开发简单的应用程序,我需要将javascript参数传递给spring控制器。我尝试了几种方法,但没有一种方法可以使用。以下是我的javascript和spring控制器。请帮我解决这个问题。
Java脚本
function searchViaAjax(id) {
alert(id);
$.ajax({
type : "POST",
contentType : "application/json",
url : "search/api/getSearchResult",
data : JSON.stringify(id),
dataType : 'json',
timeout : 100000,
success : function(id) {
console.log("SUCCESS: ", id);
display(id);
alert(response);
},
error : function(e) {
console.log("ERROR: ", e);
display(e);
},
done : function(e) {
console.log("DONE");
}
});
}
AjaxController.java
@Controller
public class AjaxController {
@ResponseBody
@RequestMapping(value = "/search/api/getSearchResult")
public String getSearchResultViaAjax(@RequestParam(value = "id") int id) {
System.out.println("come to ajax"+ id);
return "hello";
}
}
答案 0 :(得分:2)
当您将json作为请求者传递时,上述调用适用。要发送请求参数,您必须如下:
使用以下ajax调用:
function searchViaAjax(id) {
var tempId = id;
$.ajax({
type : "POST",
url : "/search/api/getSearchResult",
data : {id:tempId},
timeout : 100000,
success : function(id) {
console.log("SUCCESS: ", id);
display(id);
alert(response);
},
error : function(e) {
console.log("ERROR: ", e);
display(e);
},
done : function(e) {
console.log("DONE");
}
});
}
您也可以使用以下get方法实现此目的:
function searchViaAjax(id) {
$.ajax({
type : "GET",
url : "/search/api/getSearchResult/"+id,
timeout : 100000,
success : function(id) {
console.log("SUCCESS: ", id);
display(id);
alert(response);
},
error : function(e) {
console.log("ERROR: ", e);
display(e);
},
done : function(e) {
console.log("DONE");
}
});
}
@Controller
public class AjaxController {
@ResponseBody
@RequestMapping(value = "/search/api/getSearchResult/{id}")
public String getSearchResultViaAjax(@PathVariable(value = "id") Integer id)
{
return String.valueOf(id);
}
}
答案 1 :(得分:0)
使用JSON.stringify
时,实际上是在向Spring控制器的方法发送JSON对象。您所要做的就是将json对象包装为java对象,如此。
public class UserId {
private int id;
// setters and getters
}
在您的控制器方法中,使用@RequestBody
将您的JSON
映射到UserId
类,如此
@ResponseBody
@RequestMapping(value = "/search/api/getSearchResult", method = RequestMethod.POST)
public String getSearchResultViaAjax(@RequestBody UserId user) {
System.out.println("come to ajax" + user.getId());
return "hello";
}
PS:尚未测试但应该可以使用。
答案 2 :(得分:0)
这是您从ajax到控制器的帖子请求。 您的弹簧控制器上缺少“methodType = RequestMethod.POST”。
将@RequestMapping(value = "/search/api/getSearchResult")
替换为
@RequestMapping(value = "/search/api/getSearchResult", methodType=RequestMethod.POST)