2010-09-30 23 views
141

Duplicar posibles:
Retrieving JSON Object Literal from HttpServletRequestdatos HttpServletRequest get JSON de la POST

Estoy HTTP POST-ING URL http://laptop:8080/apollo/services/rpc?cmd=execute

con datos POST

{ "jsondata" : "data" } 

Http request tiene Content-Type de 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.

+2

Este es un método simple para obtener datos de solicitud 'request.getReader(). Lines().recoger (Collectors.joining()) ' –

+0

lo anterior arroja secuencia ya excepción cerrada – Pat

+0

Si utiliza el' getReader() 'la corriente conseguirá cerrada, ya que inicialmente sólo se puede leer de una vez. Hay una serie de alternativas en las implementaciones de Wrapper para permitir múltiples llamadas a 'getReader()' –

Respuesta

0

¿Está 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.

El problema fue la Directiva de dominio XHR Cruz, y un consejo útil sobre cómo conseguir alrededor de él mediante el uso de una técnica llamada JSONP. El gran inconveniente es que JSONP no admite solicitudes POST.

Sé que en el post original no se hace mención de JavaScript, sin embargo JSON se utiliza generalmente para JavaScript y por eso me lancé a esa conclusión

233

Normaly que se ofrecen y parámetros POST en un servlet la misma manera:

request.getParameter("cmd"); 

Pero sólo si los datos POST es encoded como pares de clave y valor de tipo de contenido: "application/x-www-form-urlencoded" como cuando se utiliza un formulario HTML estándar.

Si se utiliza un esquema de codificación diferente para sus datos de correo, como en su caso antes de enviar un flujo de datos JSON, es necesario utilizar un decodificador personalizado que puede procesar el flujo de datos en bruto de:

BufferedReader reader = request.getReader(); 

Json ejemplo el procesamiento posterior (utiliza org.json paquete)

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... 
} 
+3

Parece que solo puede obtener los datos de publicación de request.getReader * una vez *. ¿Es esto cierto? Cuando lo intenté yo mismo, fallaron las llamadas posteriores para obtener los datos posteriores de la solicitud. –

+10

Correcto, puede leer el contenido del cuerpo de la solicitud solo una vez. – Kdeveloper

+0

esto realmente me salvó el día ... pero ¿qué es getReader y cómo se completan los datos json allí? ¿es específicamente para JSON? o cualquier otro objeto? cualquier enlace útil por favor. –

-11

remitente (php json codificar):

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

receptor (java JSON recepción):

/** 
* @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 ayuda a desarrollador web y sencillo buscador JSON mente.

+0

Necesito una copia de este fragmento para mi investigación. asegúrese de que sea eliminado por voto de la comunidad pero lo tengo para mi investigación personal como privado. – YumYumYum