我通过ajax将json对象发送到java servlet。 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中,如果我做request.getParameterNames();它将返回一个枚举,其中一个表条目的键是整个对象的内容。我可能弄错了,但我的想法是它应该将每个键设置为不同的参数名称。所以我应该有4个参数,arrayOne,arrayTwo,arrayThree和string。我做错了什么还是我的想法?任何帮助表示赞赏。
由于
答案 0 :(得分:1)
当您将内容类型设置为application/x-www-form-urlencoded
时,您告诉服务器请求内容将是"param1=value1¶m2=value2..."
形式的字符串。但是你的实际内容只是一个单一的价值; x-www-form-urlencoded
内容类型与JSON无关。如果要将请求作为JSON传递,则需要将内容类型设置为application/json
,然后在服务器端使用JSON解析器来解析它并提取键/值对。 / p>
或者,您可以保留x-www-form-urlencoded type
,遍历您的JSON对象,并为每个键/值对,将值序列化为JSON字符串和URL编码,并使用它来构建请求字符串看起来像是:
arrayOne=<arrayOne JSON string>&arrayTwo=<arrayTwo JSON String>&...
答案 1 :(得分:1)
这是预期的行为,您将对象转换为字符串(使用toJSONString),并将其作为请求参数发送。您可能希望使用Jackson,Jettison或XStream等库在服务器端解析JSON值,请参阅http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/