Comment passer dans Android un RPC JSON avec des paramètres imbriqués
Question
Quel est le bon code pour passer un JSON avec des paramètres imbriqués dans cette forme
{"method":"startSession",
"params": [ "email": "testmail@test.it",
"password": "1234",
"stayLogged": "1",
"idClient": "ANDROID"
]
}
à une URL de service Web qui reçoit RPC ??
Le code de service Web est
@Webservice(paramNames = {"email", "password", "stayLogged", "idClient"},
public Response startSession(String email, String password, Boolean stayLogged, String idClient) throws Exception {
boolean rC = stayLogged != null && stayLogged.booleanValue();
UserService us = new UserService();
User u = us.getUsersernamePassword(email, password);
if (u == null || u.getActive() != null && !u.getActive().booleanValue()) {
return ErrorResponse.getAccessDenied(id, logger);
}
InfoSession is = null;
String newKey = null;
while (newKey == null) {
newKey = UserService.md5(Math.random() + " " + new Date().getTime());
if (SessionManager.get(newKey) != null) {
newKey = null;
} else {
is = new InfoSession(u, rC, newKey);
if (idClient != null && idClient.toUpperCase().equals("ANDROID")) {
is.setClient("ANDROID");
}
SessionManager.add(newKey, is);
}
}
logger.log(Level.INFO, "New session started: " + newKey + " - User: " + u.getEmail());
return new Response(new InfoSessionJson(newKey, is), null, id);
}
La solution
Je vais supposer que vous utilisez JSON-RPC 1.0 car il n'y a pas d'indicateur de version dans votre demande.
Tout d'abord, vous manquez votre "ID", alors ajoutez-le à la demande.
Maintenant, voici 3 choses différentes que vous pourriez essayer.
1) Vous devez utiliser un objet {} au lieu d'un tableau [] si vous voulez définir les paires de noms et de valeur. Comme:
{"method":"startSession",
"params": { "email": "testmail@test.it",
"password": "1234",
"stayLogged": "1",
"idClient": "ANDROID"
},
"id":100
}
2) Si votre désérialiseur JSON nécessite la syntaxe du tableau [], vous devrez peut-être envelopper votre objet {} dans [] comme:
{"method":"startSession",
"params": [{ "email": "testmail@test.it",
"password": "1234",
"stayLogged": "1",
"idClient": "ANDROID"
}],
"id":101
}
3) Enfin, vous pouvez également essayer d'utiliser des paramètres de position juste dans un tableau comme:
{"method":"startSession",
"params": [ "testmail@test.it",
"1234",
"1",
"ANDROID"
],
"id":102
}
J'espère que cela pourra aider.