1

アプリで Extjs 4 と Java サーブレットを使用しています。データをjson形式でサーバーに投稿したい。

JSON の形式は次のようになります。

{
    "credentials":[
    {
       "username":"george",
       "password":"xyz"
    }
    ]
}

私はextjsコードでこれを行いました:

buttons: [{
        text: 'Submit',
        handler: function() {               
            Ext.Ajax.request({
                url: '/Model/FormServlet',
                method: 'POST',
                jsonData : {
                    //Hardcoded values
                    username: "george", 
                    password: "xyz"
                },
                callback: function (options, success, response) {                       
                    alert(response.responseText);
                }
            });
        }           
    }]

1) 上記で投稿した JSON 形式を取得できないと思います。を使用してその形式を取得する方法を教えてくださいjsonData

2) サーブレットの doPost メソッドでこれを取得する方法は? 私は使用paramsしていないjsonDataのでrequest.getParameter、サーブレットdoPostメソッドでは機能しません。

この作業を行う方法を教えてください。

よろしく、

4

3 に答える 3

3

doPostメソッドでこのコードを試してみましたが、うまくいきました。

StringBuffer jb = new StringBuffer();
      String line = null;
      try {
        BufferedReader reader = req.getReader();
        while ((line = reader.readLine()) != null)
          jb.append(line);
        System.out.println(jb.toString());
      } catch (Exception e) { 
          e.printStackTrace();        
      }

参考記事:

HttpServletRequestはJSONPOSTデータを取得します

于 2012-10-24T13:13:46.393 に答える
3

1) あなたは大丈夫です

2) これは POST リクエストです。データはパラメーターには含まれません (例: multipart/form-data ではありません) が、HTTP 要求のコンテンツになります。ではdoPost、単にすべてを読み取りrequest.getInputStream()、適切なエンコーディングを使用して文字列に変換するか、適切に登録されrequest.getContent()ている場合は直接呼び出します。ContentHandler

の線に沿った何か

byte[] ba = IOUtils.toByteArray( req.getInputStream(  ) );
String charset = TypedContentUtils.extractCharset( req.getContentType(  ) );
String json = new String( ba, charset );

IOUtilsApache Commons IO です (独自の記述は、適切な例外処理を含む 10 行です)。TypedContentUtils.extractCharsetContent-Type から文字セットを抽出するか、デフォルトで utf-8 に設定する単純な自家製メソッドです。

于 2012-10-24T12:33:14.657 に答える
2

1) データをそのまま掲載します。コンテンツは次のようになります: { ユーザー名: "george", パスワード: "xyz"}, 上記の形式が必要で、ハードコードされている場合は、置き換えることができます。

2) genson ライブラリhttp://code.google.com/p/genson/を使用して、json を Java オブジェクトに簡単に逆シリアル化できます。

UserCredentials userCredentials = new Genson().deserialize(request.getReader(), UserCredentials.class);
于 2012-10-24T12:27:34.790 に答える