因此,根据jQuery Ajax docs,它在发送请求时以查询字符串的形式序列化数据,但设置processData:false
应该允许我在正文中发送实际的JSON。不幸的是,我很难确定第一个,如果发生这种情况,那么第二个对象看起来是什么,它被发送到服务器。我所知道的是服务器没有解析我发送的内容。
使用http client发布对象文字{someKey:'someData'}
时,它可以正常运行。但是当使用data: {someKey:'someData'}
的jQuery时,它会失败。不幸的是,当我在Safari中分析请求时,它说消息有效负载是[object Object]
...很棒...而且在Firefox中帖子是空白的......
在Java端记录正文内容时,它实际上得到[object Object]
,那么如何发送REAL JSON数据?
有没有人有过在请求体中序列化JSON数据的Java服务的经验,请求是从jQuery发送的?
BTW这里是完整的$ .ajax请求:
$.ajax({
contentType: 'application/json',
data: {
"command": "on"
},
dataType: 'json',
success: function(data){
app.log("device control succeeded");
},
error: function(){
app.log("Device control failed");
},
processData: false,
type: 'POST',
url: '/devices/{device_id}/control'
});
答案 0 :(得分:252)
实际的JSON请求如下所示:
data: '{"command":"on"}',
您发送实际JSON字符串的位置。有关更通用的解决方案,请使用JSON.stringify()
将对象序列化为JSON,如下所示:
data: JSON.stringify({ "command": "on" }),
要支持没有JSON
对象的旧浏览器,请使用json2.js将其添加。
目前正在发生的事情是因为您有processData: false
,它基本上发送了这个:({"command":"on"}).toString()
,这是[object Object]
...您在请求中看到的内容。