如何从spring mvc控制器获取jQuery $ .post的POST请求参数?
问题描述:
我需要从页面上动态加载数据库中的数据,而不需要重新加载页面。
我在JSP代码是这样的:
<script>
$(document).ready(function() {
$("#ClassNext").click(function(event){
var data = {};
var classArray = [];
$.each($("input[name='classCheckbox']:checked"), function(){
classArray.push($(this).val());
});
console.log(classArray);
data["list"] = classArray;
data["var"] = "1";
console.log(data);
$.post('PopulateClassSample',data,function(responseJson){
if(responseJson!=null){
$.each(responseJson,function(key,value){
// do something
})
}
})
})
});
<script>
<c:forEach items="${classList}" var="Class">
<li>
<input class="classCheckbox" type="checkbox" name="classCheckbox" value="${Class.classStart}"></input>
<c:out value="${Class.showString}"/>
<button style="display: none;" id="${Class.classStart}">Edit</button>
</li>
</c:forEach>
<button id="ClassNext">Next</button>
我在这里公布一个请求来提取,通过jQuery的POST($。员额)数据库中的某些信息。我期待作为包含数据库信息的JSON对象的响应。 data
变量是两个字段的对象 - 一个字段包含一个字符串数组,另一个字段包含一个字符串。这个data
变量通过javascript正确地获得了它所需的值。
映入控制器中的这个请求的方法:
@RequestMapping(value="/PopulateClassSample", method = RequestMethod.POST)
@ResponseBody
protected void SendResponse(@RequestParam("list") ArrayList<String> list, @RequestParam("start") String start, HttpServletResponse response) throws IOException
{
for(String s:list){
System.out.println(s);
}
System.out.println(start);
/*
ArrayList<AcademicClass> classList = new ArrayList<AcademicClass>();
DataAccess db = new DataAccess();
classList = db.getClassList();
Gson gson = new Gson();
JsonElement element = gson.toJsonTree(classList,new TypeToken<List<AcademicClass>>() {}.getType());
JsonArray jsonArray = element.getAsJsonArray();
response.setContentType("application/json");
response.getWriter().print(jsonArray);
*/
}
里面的数据访问类,我做的所有的数据库查询并返回通过其方法的结果。我需要HttpServletResponse对象,因为我会以JSON对象的形式返回jQuery代码。 在控制台,但我得到象这样的错误:
jquery.min.js:4 POST http://localhost:8080/Mytuition/PopulateClassSample 400()
并在控制器方法初始打印不被执行。
我试过声明一个单独的模型类(它有两个字段 - 一个String和一个String的ArrayList)并使用了@ModelAttribute注解。但后来我得到这样的例外:
java.lang.NumberFormatException: For input string: ""
有没有办法做到没有@ModelAttribute注释?为什么即使我正在使用@ModelAttribute注释,它也不能正常工作?
注:我一定会返回一些东西给JSP。该部分仅出于测试目的而被注释掉。
答
您的控制器方法错了。如果您正在对服务器执行Ajax调用,并且需要从服务器检索JSON响应,则只需执行2件事。
使用@ResponseBody在控制器中定义您的方法。然后Spring会将您返回的对象转换为JSON格式
将某些对象返回到视图。您正在返回 “空”
应该是这样的
@RequestMapping(value="/PopulateClassSample", method = RequestMethod.POST)
@ResponseBody
protected List<AcademicClass> SendResponse(@RequestParam("list") ArrayList<String> list, @RequestParam("start") String start) throws IOException
{
/** DO your staff here and return the AcademicClass list */
System.out.println(start);
DataAccess db = new DataAccess();
return db.getClassList();
}
使用的变量,比如'数据:{ 名单:classArray, 开始: “1” }, 标题:{ 'Accept':'application/json' }' –
它易于使用$ .ajax({url,type =“POST”,data //上面提到的,header //上面,success //回调方法成功响应}); –
ajax是异步的。我需要同步响应。 @mosean –