web-dev-qa-db-fra.com

HttpServletRequest obtenir les données JSON POST

Duplicate possible:
Récupération du littéral objet JSON à partir de HttpServletRequest

Je suis HTTP POST-ing to URL http: // ordinateur portable: 8080/apollo/services/rpc? Cmd = execute

avec POST data

{ "jsondata" : "data" }

La requête HTTP a un type de contenu de application/json; charset=UTF-8

Comment obtenir les données POST (jsondata) auprès de HttpServletRequest?

Si j'énumère les paramètres de requête, je ne peux voir qu'un paramètre, qui est "cmd", pas les données POST.

156
Don Ch

Normalement, vous pouvez obtenir les paramètres GET et POST dans une servlet de la même manière:

request.getParameter("cmd");

Mais seulement si les données POST sont codées en tant que paires clé-valeur de type de contenu: "application/x-www-form-urlencoded" comme lorsque vous utilisez un formulaire HTML standard.

Si vous utilisez un schéma de codage différent pour vos données de publication, comme dans votre cas lorsque vous publiez un flux de données json , vous devez utiliser un décodeur personnalisé permettant de traiter le flux de données brut. :

BufferedReader reader = request.getReader();

Exemple de post-traitement Json (utilise le package 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...
}
263
Kdeveloper