joakim
joakim

Reputation: 1752

HTTP Status 405 - Request method 'POST' not supported - jQuery.post()

Update: See here for solution

Using Spring MVC 4.

Here's my JavaScript code that makes the POST request:

$("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");
    });
});

(Tried with and without JSON.stringify, tried full $.ajax instead of $.post)

Here's my controller

@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();
}

I checked the network log that it sends the correct headers to the correct url. Post requests work for normal forms, but not for this ajax call.

Thanks.

Upvotes: 1

Views: 1274

Answers (1)

apurvc
apurvc

Reputation: 750

How do you think (String classID, String courseID) will be detected by Spring. i.e. how will the json object be mapped to java object.

If you want to use auto binding you can use jackson-mapper-asl. Take a look at this page

If you don't want to use it you can use @PathVariable, change method signatures to public @ResponseBody String addCourse(@PathVariable String classID, @PathVariable String courseID) {..}

and then hit http://localhost:8080/<appname>/class/addCourse/<classID>/<courseID>

Upvotes: 1

Related Questions