Отправка параметров JSON из Java в службу sinatra
У меня есть приложение для Android, размещаемое на моем сервисе sinatra. Ранее я не мог прочитать параметры на моем сервисе sinatra. Однако после того, как я установил тип контента на "х-WWW-форм-urlencoded», Я мог видеть параметры, но не совсем так, как я хотел. Я получаю что-то такое, как мои параметры запроса на моей службе синатры.
{"{\"user\":{\"gender\":\"female\"},\"session_id\":\"7a13fd20-9ad9-45c2-b308-
8f390b4747f8\"}"=> nil, "splat"=>["update_profile.json"], "captures"=>["update_profile.json"]}
Вот как я делаю запрос из моего приложения.
StringEntity se;
se = new StringEntity(getJsonObjectfromNameValueList(params.get_params(), "user");
se.setContentType("application/x-www-form-urlencoded");
postRequest.setEntity(se);
private JSONObject getJsonObjectfromNameValueList(ArrayList _params, String RootName) {
JSONObject rootjsonObject = new JSONObject();
JSONObject jsonObject = new JSONObject();
if (_params != null) {
if (!_params.isEmpty()) {
for (NameValuePair p : _params) {
try {
if (p.getName().equals(ApplicationFacade.SESSION_ID))
rootjsonObject.put((String) p.getName(), (String) p.getValue());
else
jsonObject.put((String) p.getName(), (String) p.getValue());
} catch (JSONException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
}
try {
rootjsonObject.put(RootName, jsonObject);
} catch (JSONException e) {
e.printStackTrace();
}
return rootjsonObject;
}
Я попытался с помощью метода, данного:Как сделать вложенный объект Json в Java?
Вот как я сделал свой запрос, используя метод, указанный в ссылке.
public ArrayList getJsonObjectfromNameValueList(ArrayList _params, String RootName){
ArrayList arrayList = new ArrayList();
JSONObject jsonObject = new JSONObject();
if (_params != null) {
if (!_params.isEmpty()) {
for (NameValuePair p : _params) {
try {
if (p.getName().equals(ApplicationFacade.SESSION_ID))
arrayList.add(new BasicNameValuePair((String) p.getName(), (String) p.getValue()));
else
jsonObject.put((String) p.getName(), (String) p.getValue());
} catch (JSONException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
}
arrayList.add(new BasicNameValuePair(RootName, jsonObject.toString()));
return arrayList;
}
Ответ, который я получил после внесения вышеуказанных изменений, был следующим:
{"session_id"=>"958c7dee-f12c-49ec-ab0c-932e9a4ed173",
"user"=>"[gender=male]",
"splat"=>["update_profile.json"],
"captures"=>["update_profile.json"]}
Довольно близко, но этопол = мужской» не желательно. Мне нужно слепо передать эти аргументы другой службе, поэтому я должен понять их правильно.
Параметры, которые я хочу видеть на службе синатры, следующие.}
{"session_id" : "958c7dee-f12c-49ec-ab0c-932e9a4ed173",
"user":
{
"gender" : "male"
}