Spring MVC Json 405 (Method Not Allowed)/ 404 Bad Request

在spring mvc 框架下利用Ajax向后台发送Json格式数据,出现了404、405问题。

原因如下:

  1. 出现404,是因为Ajax的type设成了“GET”,但是@RequestBody注解不支持GET,只支持POST.
  2. 出现405,是因为框架添加了spring security, 凡是post方法都需要token验证。

具体配置如下:
ajax:

    <script type="text/javascript">
        var value=[];
        $(document).ready(function()
            {
                var token = $('#csrfToken').val();
                var header = $('#csrfHeader').val();

                var saveDataAry=[];  
                var data1={username:"test",email:"gz"};  
                var data2={username:"ququ",email:"gr"};  
                saveDataAry.push(data1);  
                saveDataAry.push(data2);

                $("#click").click(function(){
                    var link=$("#urlpath").val();
                    $.ajax(
                        {
                            url:link,
                            type:"POST", 
                            dataType:"json",
                            contentType:"application/json",  
                            data:JSON.stringify(saveDataAry),
                            beforeSend: function(xhr) {
                            xhr.setRequestHeader("Accept", "application/json");
                            xhr.setRequestHeader("Content-Type", "application/json");
                            xhr.setRequestHeader(header, token);
                            }
                        });
                });
            });
    </script>
<body>
<input type="hidden" id="csrfToken" value="${_csrf.token}"/>
<input type="hidden" id="csrfHeader" value="${_csrf.headerName}"/>
<input type="hidden" id="urlpath" value=<c:url value="/auth/json"/>>
</div>
    <button id="click">Click</button>
</body>

Controller

    @RequestMapping(value="/auth/json",method=RequestMethod.POST,consumes="application/json")  
    public @ResponseBody String getShopInJSON(@RequestBody List<TestUser>user) {

        System.out.println(user.get(0).getEmail());
        return "";
    }

TestUser

package com.user;

public class TestUser {
    private String username;
    private String email;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值