Java解析得到jquery发送的params

时间:2012-05-23 15:40:45

标签: java jquery ajax post get

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

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

这是一个使用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 convert JSONObject to URL parameter似乎正好与我的要求相反。但它没有答案......

1 个答案:

答案 0 :(得分:2)

这是JSON,您可以使用Gson库将其映射到POJO。见this tutorial

阅读HttpServletRequest

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

修改

您可能需要查看this topic,它可以帮助您将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
  });
});