【问题标题】:Java parse get params sent by jqueryJava parse 获取 jquery 发送的参数
【发布时间】:2012-05-23 15:40:45
【问题描述】:

编辑也许这是更好的解释(对不起,我比英语更了解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 convert JSONObject to URL parameter 似乎与我的要求完全相反。但它没有答案......

【问题讨论】:

    标签: java jquery ajax post get


    【解决方案1】:

    这是 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
      });
    });
    

    【讨论】:

    • 我已经用过Gson,但我认为它可以从json字符串解码,你的意思是它也可以从http请求参数中捕获对象吗?
    • @Tobia 我不太清楚你所说的 http request params 是什么意思,但我更新了我的答案 - 看看它是否合适。
    • 我试图解释更好地编辑我的问题,在你的例子中,我的 httpServletRequest 似乎有一个 json 字符串而不是 get/post 参数
    • @Tobia Firebug 嗅探器没有显示 HTTP 请求的真实样子。问题是每个请求都包含标头和数据。并且您的 complex object 被转换为 JSON 并在数据部分中发送。如果要恢复该对象,则必须(不是唯一的选择)创建 POJO 并使用 InputStreamReader 将 JSON 从数据部分转换为 POJO。
    • @Tobia 说清楚 - 您在 Firebug 嗅探器中看到的内容是经过解析和格式化的 HTTP 请求。在 Java servlet 中,您将获得与 JavaScript 中 data: 之后完全相同的字符串。
    猜你喜欢
    • 2013-10-22
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2017-10-18
    • 2018-02-18
    • 1970-01-01
    相关资源
    最近更新 更多