web-dev-qa-db-fra.com

Récupération du littéral d'objet JSON à partir de HttpServletRequest

J'écris du code qui doit extraire un littéral d'objet publié sur une servlet. J'ai étudié l'API de l'objet HttpServletRequest, mais je ne sais pas comment extraire l'objet JSON de la demande car il n'est pas publié à partir d'un élément de formulaire sur une page Web.

Toute idée est appréciée.

Merci.

49
DarthMaul

vous cherchez cela ?

@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());
}
59
user305224

Le moyen le plus simple est de remplir votre bean à partir d'un objet Reader, cela peut être fait en un seul appel:

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

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

utiliser le processeur jackson JSON

 ObjectMapper mapper = new ObjectMapper();
  Book book = mapper.readValue(request.getInputStream(),Book.class);
22
Clyde D'Cruz

Il existe une autre façon de le faire, en utilisant org.Apache.commons.io.IOUtils pour extraire la chaîne de la requête

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

Ensuite, vous pouvez faire ce que vous voulez, le convertir en JSON ou tout autre objet avec Gson, etc.

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

Il s'agit d'une méthode simple pour obtenir des données de demande à partir de HttpServletRequest à l'aide de Java 8 Stream API:

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

Si vous essayez d'extraire des données du corps de la demande, le code ci-dessus fonctionne. Mais je pense que vous rencontrez le même problème que moi ..

Si les données du corps sont au format JSON et que vous le souhaitez en tant qu'objet Java, vous devrez l'analyser vous-même ou utiliser une bibliothèque comme google-gson pour le gérer pour vous. Vous devriez regarder les documents et les exemples sur le site Web du projet pour savoir comment l'utiliser. C'est assez simple.

5
arunjitsingh

La conversion des données récupérées de l'objet de demande en objet json est comme ci-dessous à l'aide 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
0
Ashok