所以根据jQuery Ajax文档,它在发送请求时以查询字符串的形式序列化数据,但设置processData:false应该允许我在正文中发送实际的JSON。不幸的是,我很难确定第一,如果这正在发生,第二,对象看起来是什么,被发送到服务器。我只知道服务器没有解析我发送的内容。

当使用http客户端发布一个对象文字{someKey:'someData'}时,它是有效的。但是当使用jQuery和data: {someKey:'someData'}一起使用时,就会失败。不幸的是,当我在Safari中分析请求时,它说消息有效载荷是[object object]…伟大的……在Firefox中,这篇文章是空白的…

当在Java端记录主体内容时,它字面上得到[对象对象],所以如何发送真实JSON数据??

有人有使用Java服务在请求体中序列化JSON数据的经验吗?

顺便说一下,这是全额。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'
});

一个实际的JSON请求是这样的:

data: '{"command":"on"}',

发送一个实际的JSON字符串。对于更通用的解决方案,使用JSON.stringify()将对象序列化为JSON,如下所示:

data: JSON.stringify({ "command": "on" }),

要支持没有JSON对象的旧浏览器,请使用json2.js,它将添加JSON对象。


目前发生的事情是,因为你有processData: false,它基本上是发送这个:({"command":"on"}).toString()这是[object object]…你在你的请求中看到的。