【问题标题】:Spring MVC, Ajax post JSON Object, 405 Method not allowedSpring MVC,Ajax 发布 JSON 对象,405 方法不允许
【发布时间】:2015-09-19 19:06:38
【问题描述】:

我需要将字符串(或字符串数​​组)作为 JSON 对象发送到服务器,但如果我添加 csrf 参数+令牌,我会不断收到 405 Method not allowedBad request

这就是我想要做的:

var data = { 'info': $('#theData').html() }; // data is: <p> bla <strong>bla</strong> bla </p> 

$.ajax({
    type: 'POST',
    contentType : 'application/json',
    dataType : 'json',
    url: "editInfo", //  ?${_csrf.parameterName}=${_csrf.token}", // `Bad Request`
    data: JSON.stringify(data),
    success: function(data){
        $('#responseMsg').html('YES!').show(200);
    },
    error: function(el) {
        var msg = 'Error ' + el.status + ': ' + el.statusText;
        $('#responseMsg').html(msg).show(200);
    }
});

这是控制器:

@RequestMapping(value="editInfo", method = RequestMethod.POST, headers ="content-type=application/json")
public @ResponseBody String editInfo(
        @RequestBody Info info, 
        HttpServletRequest request) {

    // do stuff

    return "success";
}

Info 类只有 1 个名为 info 的字符串及其 getter 和 setter。理想情况下,我只想捕获 String 或 String 数组,但无论如何都没有得到 405 Method not allowed

【问题讨论】:

  • 嗯,一切看起来都很好,我无法重现 - 添加 CSRF 令牌后,您的网址会是什么样子?如果您设置静态参数(例如 url: "editInfo?param1=csrf_token"),您会得到 405 吗?
  • 天哪,它有效!我添加了 CSRF,但我不再得到 Bad request,可能是因为控制器中的 headers 在我尝试使用 CSRF 时没有。要回答您的问题,URL 如下所示:/editInfo?_csrf=8b1c698f-8086-4c3f-8d2e-913ebf93aff7
  • @pzeszko 你可以添加一个回复,我会把它作为正确答案=)
  • 谢谢,不过,我认为您不需要在控制器方法中设置标题 - 它应该可以在没有它的情况下工作。
  • 你说得对,没有headers 也可以工作...所以我不知道为什么它以前不能工作...

标签: jquery json ajax spring-mvc


【解决方案1】:

嗯,一切看起来都很好,我无法重现它 - 添加 CSRF 令牌后你的网址会是什么样子?如果您设置静态参数(例如 url: "editInfo?param1=csrf_token"),您会得到 405 吗?


最终发现问题可能是因为控制器方法没有很好地定义,所以这不是真正的 jQuery 问题。

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 2019-07-29
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 2018-08-19
    • 2016-03-04
    • 2017-05-31
    • 2018-09-08
    相关资源
    最近更新 更多