1

我正在通过 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 和字符串。我做错了什么还是我的想法在这里?任何帮助表示赞赏。

谢谢

4

2 回答 2

1

当您将 content-type 设置为 时application/x-www-form-urlencoded,您是在告诉服务器请求内容将是一个格式为 的字符串"param1=value1&param2=value2..."。但是您的实际内容只是一个值;内容类型与x-www-form-urlencodedJSON 无关。如果要将请求作为 JSON 传递,则需要将内容类型设置为application/json,然后在服务器端有一个 JSON 解析器来解析它并提取键/值对。

或者,您可以保持x-www-form-urlencoded type, 循环遍历您的 JSON 对象,并且对于每个键/值对,将值序列化为 JSON 字符串和 URL 编码,并使用它来构建如下所示的请求字符串:

arrayOne=<arrayOne JSON string>&arrayTwo=<arrayTwo JSON String>&...
于 2012-10-19T17:06:12.470 回答
1

这是预期的行为,您正在将对象转换为字符串(使用 toJSONString),并将其作为请求参数发送。您可能希望使用 Jackson、Jettison 或 XStream 等库在服务器端解析 JSON 值,请参阅http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson /

于 2012-10-19T17:08:02.840 回答