2

編集多分これはより良い説明です(申し訳ありませんが、私は英語よりもjavascriptをよく知っています...そして私はjavascriptをよく知りません:-)

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 データ内の複雑なオブジェクトを送信しています。http リクエストが firebug sniffer でどのように送信されるかを確認すると、次の 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 に答える