HTTP状态405 - 不支持请求方法“POST” - jQuery.post()

时间:2015-04-20 02:44:29

标签: spring-mvc

更新: See here for solution

使用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调用。

感谢。

1 个答案:

答案 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>