Je poste un jQuery AJAX POST sur un servlet et les données sont sous la forme de chaîne JSON. dans un objet de session et les stocker. J'ai essayé d'utiliser la classe JSONObject mais je ne parviens pas à l'obtenir.
Heres l'extrait de code
$(function(){
$.ajax(
{
data: mydata, //mydata={"name":"abc","age":"21"}
method:POST,
url: ../MyServlet,
success: function(response){alert(response);
}
});
Côté servlet
public doPost(HTTPServletRequest req, HTTPServletResponse res)
{
HTTPSession session = new Session(false);
JSONObject jObj = new JSONObject();
JSONObject newObj = jObj.getJSONObject(request.getParameter("mydata"));
Enumeration eNames = newObj.keys(); //gets all the keys
while(eNames.hasNextElement())
{
// Here I need to retrieve the values of the JSON string
// and add it to the session
}
}
Vous n'êtes pas en train d'analyser le JSON.
JSONObject jObj = new JSONObject(request.getParameter("mydata")); // this parses the json
Iterator it = jObj.keys(); //gets all the keys
while(it.hasNext())
{
String key = it.next(); // get key
Object o = jObj.get(key); // get value
session.putValue(key, o); // store in session
}
si vous utilisez jQuery .ajax (), vous devez lire le flux d'entrée de la requête HTTP
StringBuilder sb = new StringBuilder();
BufferedReader br = request.getReader();
String str;
while( (str = br.readLine()) != null ){
sb.append(str);
}
JSONObject jObj = new JSONObject(sb.toString());
Alors voici mon exemple. J'ai utilisé json.JSONTokener pour tokenize ma chaîne. (API Json-Java à partir d'ici https://github.com/douglascrockford/JSON-Java )
String sJsonString = "{\"name\":\"abc\",\"age\":\"21\"}";
// Using JSONTokener to tokenize the String. This will create json Object or json Array
// depending on the type cast.
json.JSONObject jsonObject = (json.JSONObject) new json.JSONTokener(sJsonString).nextValue();
Iterator iterKey = jsonObject.keys(); // create the iterator for the json object.
while(iterKey.hasNext()) {
String jsonKey = (String)iterKey.next(); //retrieve every key ex: name, age
String jsonValue = jsonObject.getString(jsonKey); //use key to retrieve value from
//This is a json object and will display the key value pair.
System.out.println(jsonKey + " --> " + jsonValue );
}
Sortie:
âge -> 21 ans
nom -> abc
Si vous voulez juste le rassembler dans une carte, essayez Jackson .
ObjectMapper mapper = new ObjectMapper();
...
Map<String, Object> data = mapper.readValue(request.getParameter("mydata"), Map.class);