Android-使用类似于@SerializedName

时间:2019-03-07 19:43:51

标签: java post request gson retrofit2

如果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)

如何用JSON请求所需的class_name映射对类本身进行注释?创建一个包装ClassName并在其中使用序列化名称进行注释的RequestClass?

(我尝试用@SerializedName注释类,但这给了我一个“不适用于类型”警告。)

1 个答案:

答案 0 :(得分:0)

这对我来说是一个很好的解决方案。尽管可以将其包装在另一个类中,但在我的用例中这实际上没有任何意义,因为我的大多数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();

结果应打印类似{"class_name":{"field_a": "fjdksljf", "field_b" : "jfsljd", ... etc.}}

从以下帖子中得到了这个想法: