Android - аннотирующее тело запроса POST / PATCH Retrofit2 с чем-то похожим на @SerializedName - PullRequest
2 голосов
/ 07 марта 2019

Если тело POST / PATCH должно выглядеть следующим образом

{
    "class_name" : {
        "field_a" : "fjdksljf"
        "field_b" : "jfsljd"
        ...
        etc.
    }
}

и у меня есть POJO

public class ClassName () {

    @SerializedName("field_a")
    String fieldA;

    @SerializedName("field_b")
    String fieldB;

    ... etc.
}

и я хочу передать его как

@PATCH("endpoint_url")
Call<ResponseBody> testFunction(@Body ClassName class)

Как я могу аннотировать сам класс с помощью сопоставления class_name, необходимого для запроса JSON без , создавая RequestClass, который оборачивает ClassName и аннотирует его с сериализованным именем там?

(Я пытался пометить класс с помощью @SerializedName, но он выдает предупреждение «неприменимо к типу».)

1 Ответ

0 голосов
/ 07 марта 2019

Это оказалось хорошим решением для меня.Хотя можно обернуть его в другой класс, в моем случае использования это не имеет смысла, поскольку большинству моих тел POST требуется ключ JSON для POJO, который я отправляю.

// to use the necessary @SerializedName annotations
String classNameJson = new Gson().toJson(className);    // {"field_a": "fjdksljf", "field_b" : "jfsljd", ... etc.}
JSONObject json = new JSONObject();
try {
     // must make this a new JSONObject or else it will handle classNameJson as a string and append unnecessary quotes
     json.put("class_name", new JSONObject(classNameJson));    
} catch (JSONException e) {
     // handle the error
}
String result = json.toString();

Результатдолжен напечатать примерно так JSONObject.toString: как НЕ экранировать косую черту

Java Добавить объект в JSON
...