HttpServletRequest obtient les données JSON POST

Duplication possible:
Récupération du littéral d’object JSON à partir de HttpServletRequest

Je suis HTTP POST -ing à l’URL http: // laptop: 8080 / apollo / services / rpc? Cmd = execute

avec des données POST

{ "jsondata" : "data" } 

Http demande a Content-Type d’ application/json; charset=UTF-8 application/json; charset=UTF-8

Comment puis-je obtenir les données POST (jsondata) de HttpServletRequest?

Si je énumère les parameters de la requête, je ne peux voir qu’un seul paramètre, à savoir “cmd”, et non les données POST.

Normalement, vous pouvez GET et POST parameters dans un servlet de la même manière:

 request.getParameter("cmd"); 

Mais seulement si les données POST sont encodées sous forme de paires clé-valeur de type de contenu: “application / x-www-form-urlencoded” comme lorsque vous utilisez un formulaire HTML standard.

Si vous utilisez un schéma de codage différent pour vos données de publication, comme dans votre cas lorsque vous publiez un stream de données json , vous devez utiliser un décodeur personnalisé capable de traiter le stream de données brut à partir de:

 BufferedReader reader = request.getReader(); 

Exemple de post-traitement Json (utilise le package org.json )

 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { SsortingngBuffer jb = new SsortingngBuffer(); Ssortingng 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.toSsortingng()); } catch (JSONException e) { // crash and burn throw new IOException("Error parsing JSON request ssortingng"); } // Work with the data using methods like... // int someInt = jsonObject.getInt("intParamName"); // Ssortingng someSsortingng = jsonObject.getSsortingng("ssortingngParamName"); // JSONObject nestedObj = jsonObject.getJSONObject("nestedObjName"); // JSONArray arr = jsonObject.getJSONArray("arrayParamName"); // etc... } 

Publiez-vous depuis une source différente (port ou nom d’hôte si différent)? Si oui, ce sujet très récent auquel je viens de répondre pourrait être utile.

  • Problème bizarre de jQuery – La demande d’Ajax à un programme de C ne fonctionne pas tout à fait

Le problème était la politique inter-domaines XHR et une astuce utile pour la contourner en utilisant une technique appelée JSONP. Le gros inconvénient est que JSONP ne supporte pas les requêtes POST.

Je sais que dans le message original, il n’y a aucune mention de JavaScript, cependant JSON est généralement utilisé pour JavaScript, c’est pourquoi j’ai sauté à cette conclusion

Expéditeur (php json encoder):

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

Receiver (java json decode):

 /** * @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 

J’espère que cela aide pour le développeur web et simple chercheur JSON.