2009-10-10 10 views
41

Piszę kod, który wymaga wyodrębnienia literału obiektu umieszczonego w serwlecie. Badałem API dla obiektu HttpServletRequest, ale nie jest dla mnie jasne, jak uzyskać obiekt JSON z żądania, ponieważ nie jest on publikowany z elementu formularza na stronie internetowej.Trwa pobieranie obiektu JSON Object Literal z HttpServletRequest

Doceniamy każdy wgląd.

Dzięki.

+1

Twoje pytanie jest mylące. Pokaż kod JavaScript (lub cokolwiek innego), który powoduje, że coś zostanie przekazane do serwletu, jeśli nie jest formularzem. Jeśli szukasz jakiejś wbudowanej metody J2EE, aby zrozumieć literały obiektów JSON, nie ma żadnego. –

+1

Czy Twój problem polega na tym, że próbujesz wysłać obiekt json z przeglądarki do serwletu i nie możesz uzyskać informacji o serwlecie? –

+1

Zobacz także bardziej popularne http://stackoverflow.com/questions/3831680/httpservletrequest-get-post-data – Vadzim

Odpowiedz

51

Szukasz tego?

@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

Ta metoda konwertuje json reprezentacji na ciąg, ale myślę, że prawdopodobnie nie jest najlepszym sposobem obsługi danych json. –

5

Jeśli próbujesz uzyskać dane z treści żądania, powyższy kod działa. Ale myślę, że masz taki sam problem jak ja ...

Jeśli dane w treści są w formie JSON i chcesz je jako obiekt Java, musisz je przeanalizować samodzielnie lub użyć biblioteka taka jak google-gson, aby poradzić sobie z tym za Ciebie. Powinieneś przyjrzeć się dokumentom i przykładom na stronie projektu, aby dowiedzieć się, jak z niego korzystać. To dość proste.

1

Przeliczanie retreived danych z obiektu żądania do obiektu JSON jest jak poniżej używając 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

Najłatwiej jest, aby wypełnić swoją fasolkę byłoby z obiektu Reader, można to zrobić w pojedynczy wezwanie:

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

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

skorzystać z procesorem Jackson JSON

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

To jest idealne! Rządzisz! –

+0

@Clyde D'Cruz Jak korzystać z tego przy użyciu HttpExchange .. ?? – Hema

10

Nie ma innego sposobu, aby to zrobić, używając org.apache.commons.io.IOUtils wyodrębnić ciąg z żądania

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

Potem możesz robić, co chcesz, przekształcić go JSON lub innego obiektu z Gson itp

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

jest to prosta metoda, aby uzyskać dane żądania od HttpServletRequest użyciu Java 8 Stream API:

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