【问题标题】:HTTP Status 405 - Request method 'POST' not supported - jQuery.post()HTTP 状态 405 - 不支持请求方法“POST” - jQuery.post()
【发布时间】:2015-06-26 15:01:51
【问题描述】:

更新: 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();
}

我检查了网络日志,它向正确的 url 发送了正确的标头。发布请求适用于普通表单,但不适用于此 ajax 调用。

谢谢。

【问题讨论】:

  • Spring MVC 对于 URL 来说可能有点混乱。完整的 URL 拆分为:http://host/contextPath/dispatcherServletPath/controllerPath。我认为curl 只会添加上下文路径。因此,如果 dispatcherServlet 没有映射到 //* 浏览器将不会命中正确的控制器。

标签: spring-mvc


【解决方案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/&lt;appname&gt;/class/addCourse/&lt;classID&gt;/&lt;courseID&gt;

【讨论】:

  • 感谢您的回复。我用杰克逊更新了(更新了原始代码),但仍然是同样的错误。
  • 还用@PathVariables 尝试了其他解决方案,同样的错误
猜你喜欢
  • 2013-03-03
  • 2016-11-11
  • 1970-01-01
  • 2012-06-24
  • 2015-05-01
  • 2015-04-09
  • 2016-03-29
  • 2014-09-24
  • 1970-01-01
相关资源
最近更新 更多