HttpServletRequest obtiene datos JSON POST

Posible duplicado:
Recuperando el objeto JSON Literal de HttpServletRequest

Estoy HTTP POST-ing a la URL http: // laptop: 8080 / apollo / services / rpc? Cmd = execute

con datos POST

{ "jsondata" : "data" } 

La solicitud Http tiene Content-Type of application/json; charset=UTF-8 application/json; charset=UTF-8

¿Cómo obtengo los datos POST (jsondata) de HttpServletRequest?

Si enumero los parámetros de solicitud, solo puedo ver un parámetro, que es “cmd”, no los datos POST.

Normalmente, puede GET y POST parámetros en un servlet de la misma manera:

 request.getParameter("cmd"); 

Pero solo si los datos POST están codificados como pares clave-valor del tipo de contenido: “application / x-www-form-urlencoded”, como cuando se usa un formulario HTML estándar.

Si usa un esquema de encoding diferente para sus datos de publicación, como en su caso cuando publica una secuencia de datos json , necesita usar un decodificador personalizado que pueda procesar la stream de datos sin procesar desde:

 BufferedReader reader = request.getReader(); 

Ejemplo de postprocesamiento de Json (utiliza el paquete 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... } 

¿Estás publicando desde una fuente diferente (tan diferente puerto o nombre de host)? Si es así, este tema muy reciente que acabo de responder podría ser útil.

  • Problema extraño de jQuery: la solicitud de Ajax a un progtwig de C no funciona del todo

El problema fue la Política de dominio cruzado XHR, y un consejo útil sobre cómo solucionarlo utilizando una técnica llamada JSONP. El gran inconveniente es que JSONP no admite solicitudes POST.

Sé que en la publicación original no se menciona a JavaScript, sin embargo, JSON se usa generalmente para JavaScript, por eso llegué a esa conclusión

Remitente (encoding php json):

 {"natip":"127.0.0.1","natport":"4446"} 

Receptor (deencoding de java json):

 /** * @comment: I moved all over and could not find a simple/simplicity java json * finally got this one working with simple working model. * @download: http://json-simple.googlecode.com/files/json_simple-1.1.jar */ JSONObject obj = (JSONObject) JSONValue.parse(line); //line = {"natip":"127.0.0.1","natport":"4446"} System.out.println( obj.get("natport") + " " + obj.get("natip") ); // show me the ip and port please 

Espero que ayude para el desarrollador web y buscador de JSON de mente simple.