Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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
Java 在Spring Controller上的$.ajax POST之后收到错误的请求错误(400)_Java_Jquery_Ajax_Spring_Request Mapping - Fatal编程技术网

Java 在Spring Controller上的$.ajax POST之后收到错误的请求错误(400)

Java 在Spring Controller上的$.ajax POST之后收到错误的请求错误(400),java,jquery,ajax,spring,request-mapping,Java,Jquery,Ajax,Spring,Request Mapping,你好,StackOverFlow(s) 我一直在处理这个问题,现在已经有两个多小时了 很简单 我试图通过使用$.ajax POST调用将JSON对象发送到Spring控制器 我用的是AngularJS,但这一点没有问题 下面是服务器和客户端的代码以及spring配置 提前感谢 JQuery: $scope.push = function() { $.ajax({ type: "PUT", url:"rest/todo/greeting/",

你好,StackOverFlow(s)

我一直在处理这个问题,现在已经有两个多小时了 很简单

我试图通过使用$.ajax POST调用将JSON对象发送到Spring控制器

我用的是AngularJS,但这一点没有问题

下面是服务器和客户端的代码以及spring配置

提前感谢

JQuery:

    $scope.push = function() {
    $.ajax({
        type: "PUT",
        url:"rest/todo/greeting/",
        data : {id:"1",title:"ajax",description:"ajax"},
        dataType: "json",
        contentType : "application/json",
        success : function(data) {
            $log.info(data)
        }
    })
}
弹簧控制器:

@Controller
@RequestMapping("/todo")
public class TodoController {
@RequestMapping(value = "/greeting", method = RequestMethod.PUT,consumes="application/json",produces="text/html")
public @ResponseBody String push(@RequestBody Todo todo) {
    System.out.println(todo.getTitle());
    return "test";
}
}

弹簧配置:

<mvc:annotation-driven />
<context:component-scan base-package="org.lab.todo.controller" />
<bean id="defaultViews" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
Fiddle原始请求标头:

POST http://localhost:8080/todo-rest/rest/todo/greeting HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 0
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://localhost:8080
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko)     Chrome/24.0.1312.56 Safari/537.17
Referer: http://localhost:8080/todo-rest/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,fr;q=0.6
Accept-Charset: UTF-8,*;q=0.5
小提琴响应头

HTTP/1.1 415 Unsupported Media Type
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 1048
Date: Thu, 31 Jan 2013 17:11:40 GMT

你能发布你的web.xml吗?由于您没有为请求定义后缀并在末尾加上斜杠,因此您正在请求该目录的index.jsp。

您可以发布web.xml吗?由于您没有为请求定义后缀并在末尾添加斜杠,因此您正在向该目录的index.jsp发出请求。

如果您获得400状态码,则只能出于以下原因(从):

10.4.1 400错误请求

由于语法错误,服务器无法理解该请求。未经修改,客户端不应重复请求

对于Spring,这要么意味着ajax请求是错误的(请参阅我对数据JSON字符串的评论),要么它无法解析请求体中的JSON字符串并将其转换为命令对象
Todo
。Spring有一个可以调用的方法,你的
push()
方法,但是它没有你想要传递给它的参数,所以它抛出了一个400错误的请求


415不支持的媒体类型
意味着Spring无法找到一种方法来使用您正在发送的内容。您的
push()
Spring方法
使用=“application/json”
,但您的请求未使用该内容类型。

如果您获得的是400状态代码,则只能出于以下原因(从):

10.4.1 400错误请求

由于语法错误,服务器无法理解该请求。未经修改,客户端不应重复请求

对于Spring,这要么意味着ajax请求是错误的(请参阅我对数据JSON字符串的评论),要么它无法解析请求体中的JSON字符串并将其转换为命令对象
Todo
。Spring有一个可以调用的方法,你的
push()
方法,但是它没有你想要传递给它的参数,所以它抛出了一个400错误的请求

415不支持的媒体类型
意味着Spring无法找到一种方法来使用您正在发送的内容。您的
push()

这只是正确编写JSON字符串的问题

而不是

var jsonString = {id:"1",title:"ajax",description:"ajax"};
我是这样写的

var jsonString = '{"id":"1","title":"ajax","description":"ajax"}';
更奇怪的是,JSON.stringify(MyObject)在我的情况下似乎不起作用

以下是答案

这只是正确编写JSON字符串的问题

而不是

var jsonString = {id:"1",title:"ajax",description:"ajax"};
我是这样写的

var jsonString = '{"id":"1","title":"ajax","description":"ajax"}';

更奇怪的是,JSON.stringify(MyObject)在我的情况下似乎不起作用

我相信您的
数据
值格式不正确。尝试在ajax调用之外创建json字符串并将其传入
data=“{id:\'1\”,title:\'ajax\”,description:\'ajax\“}”
它返回相同的响应。请在帖子中检查项目URL。谢谢,我认为您的
数据
值格式不正确。尝试在ajax调用之外创建json字符串并将其传入
data=“{id:\'1\”,title:\'ajax\”,description:\'ajax\“}”
它返回相同的响应。请在帖子中检查项目URL。感谢2件事:您能试着通过firebug了解ajax请求执行的url吗?第二:你能试着在你的ajax请求中删除你的结束斜杠吗?正确的url被调用了,我在删除最后一个斜杠后尝试了,结果是一样的。我更新了这篇文章,添加了一个包含该项目的公共SVN repo,使用mvn tomcat:run-to-launch。2件事:您能否尝试通过firebug了解您的ajax请求执行的url?第二:你能试着在你的ajax请求中删除你的结束斜杠吗?正确的url被调用了,我在删除最后一个斜杠后尝试了,结果是一样的。我更新了这篇文章,添加了一个公共SVN repo,其中包含这个项目,使用mvn tomcat:run-to-launch。你能不能用Fiddle看到请求的主体?另外,您将请求更改为POST,是否更改了控制器方法?您还需要在请求中为
Content-type:application/json
添加标题。请求抛出小提琴的主体中没有显示任何内容,并且控制器已更新。contentType覆盖标头内容类型,它似乎出现在请求标头中-请参阅更新-感谢EAH,但在新的
$.post()
函数调用中没有contentType。实际上,它似乎会在post时自动添加它。我使用了Fiddle Composer并将json对象放入请求体中,它总是响应415,现在我将研究spring端。谢谢你没有看到请求的正文吗?另外,您将请求更改为POST,是否更改了控制器方法?您还需要在请求中为
Content-type:application/json
添加标题。请求抛出小提琴的主体中没有显示任何内容,并且控制器已更新。contentType覆盖标头内容类型,它似乎出现在请求标头中-请参阅更新-感谢EAH,但在新的
$.post()
函数调用中没有contentType。实际上,它似乎会在post时自动添加它。我使用了Fiddle Composer并将json对象放入请求体中,它总是响应415,现在我将研究spring端。