2009-10-10 31 views
41

Estoy escribiendo un código que necesita extraer un objeto literal publicado en un servlet. He estudiado la API para el objeto HttpServletRequest, pero no tengo claro cómo obtener el objeto JSON de la solicitud, ya que no se publica desde un elemento de formulario en una página web.Recuperando el objeto JSON Literal de HttpServletRequest

Cualquier idea es apreciada.

Gracias.

+1

Su pregunta es confusa. Muestre el código JavaScript (o lo que sea) que haga que se transfiera algo al servlet, si no es un formulario. Si está buscando algún método J2EE incorporado para comprender los literales de objetos JSON, no hay ninguno. –

+1

¿Su problema es que está tratando de enviar un objeto json desde el navegador al servlet y no puede obtener la información en el servlet? –

+1

Vea también más popular http://stackoverflow.com/questions/3831680/httpservletrequest-get-post-data – Vadzim

Respuesta

51

¿Estás buscando esto?

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    StringBuilder sb = new StringBuilder(); 
    BufferedReader reader = request.getReader(); 
    try { 
     String line; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line).append('\n'); 
     } 
    } finally { 
     reader.close(); 
    } 
    System.out.println(sb.toString()); 
} 
+3

Este método convierte la representación json en una cadena, pero creo que probablemente no sea la mejor forma de manejar datos json. –

5

Si está tratando de obtener datos del cuerpo de la solicitud, el código anterior funciona. Pero, creo que está teniendo el mismo problema que yo ...

Si los datos en el cuerpo están en formato JSON, y lo quiere como un objeto Java, tendrá que analizarlo usted mismo, o utilizar un biblioteca como google-gson para manejarlo por usted. Debería ver los documentos y ejemplos en el sitio web del proyecto para saber cómo usarlo. Es bastante simple.

1

la conversión de los datos retreived del objeto de petición de objeto JSON es la siguiente a través de Google-GSON

Gson gson = new Gson(); 
ABCClass c1 = gson.fromJson(data, ABCClass.class); 

//ABC class is a class whose strcuture matches to the data variable retrieved 
17

La forma más sencilla es poblar el bean sería a partir de un objeto Reader, esto se puede hacer en una sola llamada:

BufferedReader reader = request.getReader(); 
Gson gson = new Gson(); 

MyBean myBean = gson.fromJson(reader, MyBean.class); 
9

hacer uso del procesador de Jackson JSON

ObjectMapper mapper = new ObjectMapper(); 
    Book book = mapper.readValue(request.getInputStream(),Book.class); 
+0

¡Esto es perfecto! ¡Rock! –

+0

@Clyde D'Cruz ¿Cómo usar esto mientras se usa HttpExchange .. ?? – Hema

10

Hay otra manera de hacerlo, usando org.apache.commons.io.IOUtils para extraer la cadena desde la solicitud

String jsonString = IOUtils.toString(request.getInputStream()); 

A continuación, puede hacer lo que quiera, convertirlo a JSON u otro objeto con Gson, etc.

JSONObject json = new JSONObject(jsonString); 
MyObject myObject = new Gson().fromJson(jsonString, MyObject.class); 
2

Este es el método simple para obtener datos de la solicitud de HttpServletRequest usando Java 8 corriente del API:

String requestData = request.getReader().lines().collect(Collectors.joining()); 
Cuestiones relacionadas