请求的资源不允许使用指定的HTTP方法(jquery POST为spring)

时间:2015-04-24 07:57:30

标签: spring-mvc

使用Spring MVC 4.

这是我的jQuery POST调用:

$.post("<c:url value="/class/addCourse" />/" + d.classID + "/" + d.courseID);

这是我的控制器

@RequestMapping(value = "/class/addCourse/{classID}/{courseID}", method = RequestMethod.POST)
public @ResponseBody String addCourse(@PathVariable String classID, @PathVariable String courseID) {
    StringBuilder sb = new StringBuilder();
    try{
        Class c = classServ.findOne(classID);
        c.Courses.add(courseServ.findOne(Long.parseLong(courseID)));
        sb.append("{success:true}");
    } catch (Exception e){
        sb.append("{error:\"").append(e.getMessage()).append("\"}");
    }
    return sb.toString();
}

这是错误

enter image description here

以下是请求的标头

enter image description here

1 个答案:

答案 0 :(得分:0)

由于我使用的是Spring Security,因此必须在POST标头中包含CSRF令牌。在页面上的隐藏字段中自动生成令牌。这个AJAX请求有效:

$.ajax({
    type: "POST",
    url: "${pageContext.request.contextPath}/class/addCourse/" + d.classID + "/" + d.courseID,
    beforeSend: function (xhr) {
        xhr.setRequestHeader('X-CSRF-Token', $("input[name=_csrf]").val());
    }
});