response возвращает не те данные

Мне нужно отправить запрос с JSONobject, он создался и работает нормально, вот код

 JSONObject rootJson = null;

        JSONObject itemObject = null;
        try {
            // создаем корневой элемент
            rootJson = new JSONObject();
            // создаем массив json объектов
            JSONArray listJson = new JSONArray();
            // создаем элемент списка
            itemObject = new JSONObject();

            // заполняем элемент списка
            itemObject.put("id", productList.get(position).getId());
            itemObject.put("qty", 11);

            // кладем его в JSONArray
            listJson.put(itemObject);
            // который в свою очередь кладем в корневой элемент в поле list
            rootJson.put("list", listJson);
            rootJson.toJSONArray(a);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        JSONObject finalRootJson = rootJson;

Запрос отправляю при помощи retrofit

Retrofit.Builder builder = new Retrofit.Builder().baseUrl("link")
                        .addConverterFactory(GsonConverterFactory.create());

                Retrofit retrofit = builder.build();

                IntApi api = retrofit.create(IntApi.class);
                Call<JSONObject> call = api.add(finalRootJson);

                call.enqueue(new Callback<JSONObject>() {
                    @Override
                    public void onResponse(Call<JSONObject> call, retrofit2.Response<JSONObject> response) {
                        Toast toast = Toast.makeText(context,
                                response.toString(), (Toast.LENGTH_SHORT));
                        toast.show();
                    }

                    @Override
                    public void onFailure(Call<JSONObject> call, Throwable t) {
                        Toast toast = Toast.makeText(context,
                                "Помилка" + t.getMessage(), Toast.LENGTH_SHORT);
                        toast.show();
                    }
                });
            }
        });

IntApi

 @POST("link")
    Call<JSONObject> add(@Body JSONObject a);

В ответ в responce мне приходит та ссылка, куда я запрос отправляю. А должен приходить Json массив типа

{
  "status": true,
  "error": [],
  "orderUrl": "url"
}

саму url мне нужно получить

Подсказали, что необходимо создать объект при помощи GSON. Нужен массив типа

{"list": [{ "id" : 2, "qty" : 11 }]} 

Ответы (2 шт):

Автор решения: Andrew

Вот можно сделать такую модель:

public class ArrayItem{
    public int id;
    public int qty;
}

public class MyModel{
    public ArrayList<ArrayItem> list;
}

и сделать отправку так:

@POST("link")
Call<JSONObject> add(@Body  MyModel a);

дальше вы создаете модель с нужными вам данными, и отправляете.

→ Ссылка
Автор решения: woesss

Насколько я помню ретрофит конвертирует тело запроса назначенным конвертером и я сомневаюсь что Gson конвертирует классы другой json-библиотеки в то, что вы ожидаете, даже если оно соответствует формату JSON для запроса.
Лучше сделать нормальный POJO, в этом могут помочь конвертеры, коих немало и в виде плагинов к IDE, и в онлайне, в других вариациях.
Пример POJO для строки {"list": [{ "id" : 2, "qty" : 11 }]}:

public class RootObjectModel {
    public List<SubObjectModel> list;
}

public class SubObjectModel {
    public int id;
    public int qty;
}

Модель ответа тоже следует заменить на POJO или класс из библиотеки конвертера:

   org.json.JSONObject -> com.google.gson.JsonObject
→ Ссылка