使用Spring MVC 4.
这是我发出POST请求的JavaScript代码:
$("input.toggleCourse").change(function(e){
var d = {
classID: classID,
courseID: courseID
};
$.post(
"<c:url value="/class/addCourse" />",
JSON.stringify(d))
.done(function(data){
alert("ok");
});
});
(尝试使用和不使用JSON.stringify,尝试使用完整的$ .ajax而不是$ .post)
这是我的控制器
@RequestMapping(value = "/class/addCourse", method = RequestMethod.POST)
public @ResponseBody String addCourse(@RequestBody final CourseInClass cic) {
StringBuilder sb = new StringBuilder();
try{
Class c = classServ.findOne(cic.ClassID);
c.Courses.add(courseServ.findOne(cic.CourseID));
sb.append("{success:true}");
} catch (Exception e){
sb.append("{error:\"").append(e.getMessage()).append("\"}");
}
return sb.toString();
}
我检查了网络日志,它将正确的标头发送到正确的网址。发布请求适用于普通表单,但不适用于此ajax调用。
感谢。
答案 0 :(得分:1)
您如何看待(String classID,String courseID)将被Spring检测到。即如何将json对象映射到java对象。
如果您想使用自动绑定,可以使用jackson-mapper-asl。看一下这个page
如果您不想使用它,可以使用@PathVariable,
将方法签名更改为public @ResponseBody String addCourse(@PathVariable String classID, @PathVariable String courseID) {..}
然后点击http://localhost:8080/<appname>/class/addCourse/<classID>/<courseID>