Javascript Java servlet';s请求参数';s名称设置为整个json对象

Javascript Java servlet';s请求参数';s名称设置为整个json对象,javascript,ajax,json,jsp,Javascript,Ajax,Json,Jsp,我通过ajax将json对象发送到Javaservlet。 json对象是键值类型,有三个指向数组的键和一个指向单个字符串的键。我用javascript构建它,如下所示: var jsonObject = {"arrayOne": arrayOne, "arrayTwo": arrayTwo, "arrayThree": arrThree, "string": stringVar}; 然后,我使用ajax将其发送到java servlet,如下所示: httpRequest.open('POS

我通过ajax将json对象发送到Javaservlet。 json对象是键值类型,有三个指向数组的键和一个指向单个字符串的键。我用javascript构建它,如下所示:

var jsonObject = {"arrayOne": arrayOne, "arrayTwo": arrayTwo, "arrayThree": arrThree, "string": stringVar};
然后,我使用ajax将其发送到java servlet,如下所示:

httpRequest.open('POST', url, true);  
httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  
httpRequest.setRequestHeader("Connection", "close");  
var jsonString = jsonObject.toJSONString();   
httpRequest.send(jsonString);
这将把字符串发送到我的servlet,但它并没有像我期望的那样显示出来。整个json字符串被设置为我请求的一个参数的名称。因此,在我的servlet中,如果我请求;它将返回一个枚举,其中一个表项的键是整个对象内容。我可能弄错了,但我的想法是它应该将每个键设置为不同的参数名。所以我应该有4个参数,arrayOne,arrayTwo,ArrayTree和string。我是做错了什么,还是我的想法偏离了这里?感谢您的帮助


谢谢

当您将内容类型设置为
application/x-www-form-urlencoded
时,您告诉服务器请求内容将是
格式的字符串“param1=value1¶m2=value2…”
。但你的实际内容只是一个单一的价值;
x-www-form-urlencoded
内容类型与JSON无关。如果希望将请求作为JSON传递,则需要将内容类型设置为
application/JSON
,然后在服务器端使用JSON解析器对其进行解析并提取键/值对

或者,您可以保留
x-www-form-urlencoded类型
,在JSON对象中循环,对于每个键/值对,将值序列化为JSON字符串和URL编码,并使用该字符串构建如下所示的请求字符串:

arrayOne=<arrayOne JSON string>&arrayTwo=<arrayTwo JSON String>&...
arrayOne=&arrayTwo=&。。。

这是预期的行为,您正在将对象转换为字符串(使用toJSONString),并将其作为请求参数发送。您可能希望使用Jackson、Jettison或XStream等库在服务器端解析JSON值。请参见

您可以使用jQuery吗?它的
.ajax
和相关方法为您处理所有编码。我可以使用jquery,所以我将检查这些。不过,我可能只做服务器端解析。谢谢