2

编辑也许这是更好的解释(对不起,我比英语更了解javascript......而且我不太了解javascript :-)

我需要通过我的servlet 在java bean 中映射一个用jquery $.ajax 发送的复杂javascript 对象。

这是一个使用 jQuery 完成并使用 Firebug 嗅探的真实示例。这是js代码:

$("#test").click(function(){
    $.ajax({
        url: "/server", 
        data: { "data1": [{key:1, val:2},{key:3, val:4}] }, 
        type: "post",               
        }
    });
});

正如你所看到的,我在 $.ajax 数据中发送了一个复杂的对象,而不是一个简单的地图。如果我检查如何使用 firebug 嗅探器发送 http 请求,我会得到这个 POST 参数:

Parameters application/x-www-form-urlencoded
data1[0][key]   1
data1[0][val]   2
data1[1][key]   3
data1[1][val]   4

这就是 jquery 将复杂对象转换为简单映射的方式。我想在 java bean 中获取这个对象。谢谢。

EDIT2 这:Java 将 JSONObject 转换为 URL 参数似乎与我的需求完全相反。但它没有答案...

4

1 回答 1

2

这是 JSON,您可以使用Gson库将其映射到 POJO。看这个教程

读取 HttpServletRequest

Gson gson = new Gson();
SomeClass someClass = gson.fromJson(
        new InputStreamReader(httpServletRequest.getInputStream()), SomeClass.class);

编辑

您可能想查看这个主题,它可以帮助您将 JSON 映射到 POJO(或您所说的 Java bean)。

编辑 2

尝试添加processData参数并将其设置为false. 这应该可以防止将给定的 JSON 转换为查询字符串。

$("#test").click(function(){
  $.ajax({
      url: "/server", 
      data: { "data1": [{key:1, val:2},{key:3, val:4}] }, 
      type: "post", 
      processData: false
  });
});
于 2012-05-23T15:42:09.850 回答