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

来源:互联网 发布:pr cc 2015 mac 下载 编辑:程序博客网 时间:2024/05/15 23:02

在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;    }}
0 0
原创粉丝点击