retrofit 2 - how to pass a POST json object

android, gson

Solution

I saw this question that I made 1 year ago and I`m using another solution nowdays. If someone still needs a help and looking for this, here we go:

I have made a function to handle the JSON format that I want:

 public String serialize(List<Object> objects, String arrKey, String 
     objKey) {
    JsonArray ja = new JsonArray();
    for (Object object: objects) {
        Gson gson = new Gson();
        JsonElement je = gson.toJsonTree(object);
        JsonObject jo = new JsonObject();
        jo.add(objKey, je);
        ja.add(jo);
    }

    JsonObject objMain = new JsonObject();
    objMain.add(arrKey,ja);

    return objMain.toString();

}

And in my API Call I have this line:

     String json = new CustomGsonAdapter().serialize(surveysList, "surveys","survey");
    RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);

`RequestBody` is the trick. Now, just need to pass this `RequestBody` to retrofit call and thats it.

@POST("surveys")
Call<Void> setSurveys(@Body RequestBody json);

I dont know if this is the best way to archieve the problem, but for me it was. Save time and avoid to create a class just to send to server.

Problem

So, i have a List of my custom Object and I need a JSON like this: ``` { "surveys": [{ "survey": { "code": "05052017153632", "date": "05/05/2017 15:36:32", "device_id": 1, "questions_attributes": [{ "kind": "string", "label": "Você encontrou tudo o que procurava?", "value": "Infelizmente, não" }, { "kind": "string", "label": "Em qual departamento você não encontrou o produto?", "value": "FERRAMENTAS, TAPETES" }, { "kind": "string", "label": "Deseja que a Havan entre em contato com você?", "value": "Não informado" }, { "kind": "string", "label": "Nome", "value": "Não informado" }, { "kind": "string", "label": "E-mail", "value": "Não informado" }, { "kind": "string", "label": "Telefone", "value": "Não informado" }] } }]} ``` But I dont have any ideia how to do it using Gson. I'm Using Retrofit 2 and need to pass this JSON into a body request. Any ideias?

Original source