jQuery Ajax docs によると、リクエストを送信するときにクエリ文字列の形式でデータをシリアル化しますが、processData:false
を設定すると、実際のJSONを本文で送信できるようになります。残念ながら、これが発生していて、2番目にオブジェクトがどのように見えるかがサーバーに送信されている場合、最初に判断するのに苦労しています。私が知っているのは、サーバーが送信しているものを解析していないことだけです。
http client を使用してオブジェクトリテラル{someKey:'someData'}
をポストすると、動作します。ただし、data: {someKey:'someData'}
でjQueryを使用すると、失敗します。残念ながら、Safariでリクエストを分析すると、メッセージペイロードは[object Object]
...すばらしい...と言われ、Firefoxでは投稿は空白です...
Java側で本文の内容をログに記録するとき、文字通り[object Object]
を取得するので、どのようにREAL JSONデータを送信しますか?
JQueryから送信されたリクエストを使用して、リクエスト本文のJSONデータをシリアル化するJavaサービスの経験がありますか?
ところで、ここに完全な$ .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 を使用して追加します。
現在起こっているのは、processData: false
を持っているからです。基本的には、これを送信しています:({"command":"on"}).toString()
これは、[object Object]
...リクエストに表示されるものです。