jQuery publicar json válido en el cuerpo de la solicitud

De acuerdo con los documentos de jQuery Ajax , serializa los datos en forma de una cadena de consulta al enviar solicitudes, pero la configuración de processData:false debería permitirme enviar JSON real en el cuerpo. Lamentablemente, estoy teniendo dificultades para determinar primero, si esto está sucediendo, y el segundo aspecto del objeto que se envía al servidor. Todo lo que sé es que el servidor no está analizando lo que estoy enviando.

Cuando se utiliza el cliente http para publicar un objeto literal {someKey:'someData'} , funciona. Pero cuando se usa jQuery con data: {someKey:'someData'} , falla. Lamentablemente, cuando analizo la solicitud en Safari, dice que la carga útil del mensaje es [object Object] … genial … y en Firefox, la publicación está en blanco …

Al registrar el contenido del cuerpo en el lado de Java, literalmente se obtiene [object Object] entonces, ¿cómo se envían los datos de REAL JSON?

¿Alguien ha tenido experiencia con un servicio Java serializando datos JSON en el cuerpo de la solicitud, con la solicitud enviada desde jQuery?

Por cierto, aquí está la solicitud completa $ .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' }); 

Una solicitud JSON real se vería así:

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

Donde estás enviando una cadena JSON real. Para una solución más general, use JSON.stringify() para serializar un objeto a JSON, así:

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

Para admitir navegadores antiguos que no tienen el objeto JSON , use json2.js, que lo agregará.


Lo que está sucediendo actualmente es que tiene processData: false , básicamente está enviando esto: ({"command":"on"}).toString() que es [object Object] … lo que ve en su solicitud.