Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json POST返回404,而GET在对SpringMVC控制器的Ajax调用中工作正常_Json_Ajax_Spring Mvc_Post - Fatal编程技术网

Json POST返回404,而GET在对SpringMVC控制器的Ajax调用中工作正常

Json POST返回404,而GET在对SpringMVC控制器的Ajax调用中工作正常,json,ajax,spring-mvc,post,Json,Ajax,Spring Mvc,Post,我必须将一个长的Base64字符串从JSP传递到控制器。 我的控制器上有所有@requestmapping方法作为GET方法。 当我尝试将base64字符串作为子值发送时,它抛出了一个错误,指出了头大小的问题。一些研究使我明白,如果我的方法接受POST请求,这不是问题 我一直在为我的get方法使用相同的代码,它们工作得很好……但是当我将其更改为post时,它开始抛出404 以下是我正在做的: JS: 变量搜索={ “键”:“值” } $.ajax({

我必须将一个长的Base64字符串从JSP传递到控制器。 我的控制器上有所有@requestmapping方法作为GET方法。 当我尝试将base64字符串作为子值发送时,它抛出了一个错误,指出了头大小的问题。一些研究使我明白,如果我的方法接受POST请求,这不是问题

我一直在为我的get方法使用相同的代码,它们工作得很好……但是当我将其更改为post时,它开始抛出404

以下是我正在做的:

JS:

变量搜索={ “键”:“值” }

        $.ajax({
                type : "POST",
                contentType : 'application/json; charset=utf-8',
                dataType : 'json',
                url : "/AjaxTest",
                data : JSON.stringify(search),
                success : function(result) {
                    console.log("SUCCESS: ", data);
                    alert(result);
                },
                error: function(e){
                    console.log("ERROR: ", e);
                    alert(e);
                },
                done : function(e) {
                    console.log("DONE");
                }
        });
控制器:

@RequestMapping(value = "/AjaxTest", method = RequestMethod.POST)
    public @ResponseBody String AjaxTest(@RequestBody String MyData) {
        return MyData;
    }
谁能告诉我我错过了什么


提前感谢

我认为问题在于您正在指定
类型:“POST”
,但是实际的jQuery.ajax函数使用
方法
属性来指定http方法。之所以
GET
有效,是因为method属性默认为
GET
。试着这样做:

$.ajax({
    method : "POST",
    contentType : 'application/json; charset=utf-8',
    dataType : 'application/json',
    url : "/AjaxTest",
    data : JSON.stringify(search),
    success : function(result) {
        console.log("SUCCESS: ", data);
        alert(result);
    },
    error: function(e){
        console.log("ERROR: ", e);
        alert(e);
    },
    done : function(e) {
        console.log("DONE");
    }
});

现在它给了我这个错误:加载资源失败:服务器响应状态为405(不允许使用方法)。您是否尝试将数据类型指定为“application/json”而不仅仅是“application”?您可以检查一下从浏览器->网络中作为发布的url得到了什么,然后单击此请求将从那里得到url吗?当您得到404时,我在这里看到两个问题,第一个问题是您的请求映射没有指定消费和生产细节。因此,我首先将这些值作为MediaType.APPLICATION\ujson\uutf8。其次,我看到键值对作为请求的一部分出现,但是您的方法参数@requestBody被映射到一个字符串。将其更改为pojo以匹配密钥名称,或者更改您的请求结构。让我知道这两件事是否有效?