web-dev-qa-db-ja.com

HttpServletRequestがJSON POSTデータを取得する

重複している可能性があります:
HttpServletRequestからのJSONオブジェクトリテラルの取得

私はURLにHTTP POSTしています http://ラップトップ:8080/apollo/services/rpc?cmd = execute

POSTデータ付き

{ "jsondata" : "data" }

HTTPリクエストのコンテンツタイプはapplication/json; charset=UTF-8です

HttpServletRequestからPOST data(jsondata)を取得する方法を教えてください。

リクエストのパラメータを列挙すると、POSTデータではなく、 "cmd"というパラメータが1つだけ表示されます。

152
Lydon Ch

通常は、サーブレット内でGETおよびPOSTパラメータを同じ方法で使用できます。

request.getParameter("cmd");

ただし、POST dataがコンテンツタイプのキーと値のペアとして 符号化 の場合のみ "application/x-www-form-urlencoded"標準のHTMLフォームを使うときのように

jsonデータストリームをポストする場合のように、ポストデータに別のエンコーディングスキーマを使用する場合は、次のように生データストリームを処理できるカスタムデコーダを使用する必要があります。 :

BufferedReader reader = request.getReader();

Jsonの後処理例( org.json パッケージを使用)

public void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {

  StringBuffer jb = new StringBuffer();
  String line = null;
  try {
    BufferedReader reader = request.getReader();
    while ((line = reader.readLine()) != null)
      jb.append(line);
  } catch (Exception e) { /*report an error*/ }

  try {
    JSONObject jsonObject =  HTTP.toJSONObject(jb.toString());
  } catch (JSONException e) {
    // crash and burn
    throw new IOException("Error parsing JSON request string");
  }

  // Work with the data using methods like...
  // int someInt = jsonObject.getInt("intParamName");
  // String someString = jsonObject.getString("stringParamName");
  // JSONObject nestedObj = jsonObject.getJSONObject("nestedObjName");
  // JSONArray arr = jsonObject.getJSONArray("arrayParamName");
  // etc...
}
261
Kdeveloper