将JSON数据从Javascript发布到Java

时间:2012-07-19 03:53:08

标签: java javascript json jetty apache-camel

我需要一些绝望的帮助。我已经在这里待了4个小时,而且我已经筋疲力尽了。 :/这是我的情况:

我有一个Javascript应用程序正在向外部站点发出POST请求(使用jQuery $ .post)。在外部站点上,我使用Jet Camel运行Jetty以将其暴露给Web。我在Camel中编写的Web服务期望所有请求都有JSON数据。例如,一个请求需要一个id,所以我发送它{"id": 10}

这是我的问题:它不适用于Javascript。我有一些不同的工具可以为我发送帖子请求(比如浏览器的Poster扩展名)。如果我使用Poster并将正文设置为{"id": 10},它就可以正常工作。我在服务中得到了那个确切的字符串。

但是,如果我从Javascript发帖,我会得到不同的东西。发布JSON对象将在我的服务端给我字符串“id = 10”。 (这种情况可以,但最终我需要实际的JSON对象。)如果我对JSON对象进行字符串化,我会得到JSON字符串,只有所有字符都被转义。 (例如“%7Bid%33 ......”)。

我发誓我已尝试过每种可能发布数据的方法,但我要么得到奇怪的已经解析的JSON,要么是转义字符串(或根本没有)。有没有办法我可以让Javascript不解析JSON对象并发送它(就像我的发布工具一样)?如果没有,是否有一种安全,有效的方法可以解除我获得的JSON字符串?

我真的很感激任何帮助。

4 个答案:

答案 0 :(得分:1)

我觉得我们需要更多信息,但请看一下这个javascript插件。这可能是您的解决方案:https://github.com/flowersinthesand/jquery-stringifyJSON

答案 1 :(得分:0)

尝试使用jQuery.ajax并将processData设置为false(默认为true):

$.ajax({
  url: '/where/to/post',
  type: 'POST',
  data: {"id": 10},
  processData: false
});

通常,jQuery会将data中的任何内容转换为查询字符串格式,如id=10processData标志告诉jQuery将其解释为json hashmap。

答案 2 :(得分:0)

  

发布JSON对象将在我的服务端给我字符串“id = 10”。

Javascript不会执行此转换,因此您的服务器会执行此操作。

您的服务器可能会根据您的POST的content-type做出不同的反应,例如application/json vs text/plaintext/html,这是基于REST服务的常见功能。

答案 3 :(得分:0)

这里的答案给了我一些提示,但最终,在它正常工作之前进行了大量的调整。我不得不做三件事:

  1. 添加processData: false
  2. 将JSON对象转换为JSON字符串。如果我将其作为对象保留,请求将不会触发(即使我将contentType更改为application/json)。
  3. 更改contentType to text/plain。这将它作为原始字符串发送。
  4. 这就是诀窍。我现在在服务器端获取我想要的JSON字符串。