当前位置:  开发笔记 > 前端 > 正文

Ajax POST导致405(方法不允许) - Spring MVC

如何解决《AjaxPOST导致405(方法不允许)-SpringMVC》经验,为你挑选了1个好方法。

我试图做一个AJAX调用我的春节控制器/用POST方法的行动,并从服务器返回@ResponseBody的对象.奇怪的情况是它在添加spring安全层后停止工作,之前一切正常.我将尝试解释我解决问题的步骤,然后向您展示代码/捕获/等.

经过一些研究后,我发现了一些答案,说明问题可能与csrf机制有关,所以我禁用了它,但仍然存在问题.(spring-security.xml bellow)

我已经做了一个wireshark捕获来检查请求/响应.我的ajax请求没问题,我的控制器声明没问题,但我不明白为什么,405响应指示> 允许:GET(捕获波纹管)

3.我试图通过浏览器访问我的控制器操作(即发出GET请求),我收到错误HTTP状态405 - 不支持请求方法'GET'!

4.我试图将RequestMapping(方法...)更改为RequestMethod.GET,并且请求到达控制器并且工作正常,但我不希望它在GET方法上工作,我想要一个POST请求.

5.更改了RequestMapping(使用,生成,标题)以接受所有类型的数据,但仍然是405 ...

这真让我抓狂!我发布我的文件,所以你可以检查它们,任何提示将不胜感激.谢谢!(重要说明:这是我的绝望配置)

弹簧security.xml文件








    
    
    
    
    

    

    


 ..... (authentication)  

AdminController.java

@Controller
@RequestMapping("/admin**")
public class AdminController {

    ... (all my autowired beans)

    @RequestMapping(
        value = "/events/loadEvents",
        method = RequestMethod.POST,
        consumes = MediaType.ALL_VALUE,
        produces = MediaType.ALL_VALUE,
        headers = "Accept=*/*")
    @ResponseBody
    public Event loadEvents(@RequestParam("parentId") long parentId) {
        ... (my logic)
        return event;
    }
}

请求(wireshark捕获) HTTP请求(链接污迹,因为我在我的问题上使用了简化)

响应(wireshark捕获) 在此输入图像描述

编辑 jquery ajax调用代码

$.ajax({
    type: 'POST',
    cache: false,
    url: /admin/events/loadEvents,
    data: { parentId: 1 },
    dataType = 'json',
    contentType = 'application/json',

    ...
});

rmpt.. 11

经过几个小时的研究和测试,我终于明白了,蚂蚁是一个(非常非常)愚蠢的情况.所以,在我的问题中,我说

所以我禁用了它(spring-security.xml上的csrf)并且仍然存在问题.

不,我没有禁用它.我试图禁用它


但我应该这样做:


在谈到CSRF标签也不要禁用CSRF,这是因为CSRF是默认启用!找到问题后很容易说这是一个愚蠢的错误,但是当我添加csrf标签来启用它时,我认为评论它会禁用它.在Spring Documentation上找到答案

现在,回到我的问题.要使用CSRF ENABLEDPOST AJAX调用中修复405错误消息,这非常简单.我将csrf参数保存在JS变量中,如下所示:


然后我的ajax调用看起来像这样:

var jsonParams = {};
jsonParams['parentId'] = 1;
jsonParams[csrfParameter] = csrfToken;
$.ajax({
    type: 'POST',
    cache: false,
    url: /admin/events/loadEvents,
    data: jsonParams,
    dataType = 'json',
    contentType = 'application/json',

    ...
});

像魅力一样工作.希望将来帮助某人.



1> rmpt..:

经过几个小时的研究和测试,我终于明白了,蚂蚁是一个(非常非常)愚蠢的情况.所以,在我的问题中,我说

所以我禁用了它(spring-security.xml上的csrf)并且仍然存在问题.

不,我没有禁用它.我试图禁用它


但我应该这样做:


在谈到CSRF标签也不要禁用CSRF,这是因为CSRF是默认启用!找到问题后很容易说这是一个愚蠢的错误,但是当我添加csrf标签来启用它时,我认为评论它会禁用它.在Spring Documentation上找到答案

现在,回到我的问题.要使用CSRF ENABLEDPOST AJAX调用中修复405错误消息,这非常简单.我将csrf参数保存在JS变量中,如下所示:


然后我的ajax调用看起来像这样:

var jsonParams = {};
jsonParams['parentId'] = 1;
jsonParams[csrfParameter] = csrfToken;
$.ajax({
    type: 'POST',
    cache: false,
    url: /admin/events/loadEvents,
    data: jsonParams,
    dataType = 'json',
    contentType = 'application/json',

    ...
});

像魅力一样工作.希望将来帮助某人.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有