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.
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());
}
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);
utiliser le processeur jackson JSON
ObjectMapper mapper = new ObjectMapper();
Book book = mapper.readValue(request.getInputStream(),Book.class);
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);
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());
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.
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