【问题标题】:json post body help, using retrofit and jsonObjectjson post body 帮助,使用改造和 jsonObject
【发布时间】:2020-04-14 17:08:53
【问题描述】:

虽然这个 json 看起来很简单,但我无法将其正确格式化以发布到正文中。

{
    "requests": [
        {
            "action": "reject",
            "justification": "admin reason",
            "requestId": "ee4a5b4f3af54d849a63e305c13f6c8d"
        }
    ],
    "justification": "admin reason"
}

这是我目前在 Android Studio 中使用 Retrofit2 的内容

Gson gson = new GsonBuilder()
    .setLenient()
    .create();
Retrofit.Builder builder = new Retrofit.Builder()
    .baseUrl("https://myurl.com/")
    .addConverterFactory(GsonConverterFactory.create(gson));
JsonObject jsonObject = new JsonObject();
JsonObject jsonObjectN = new JsonObject();
jsonObject.addProperty("action", action);
jsonObject.addProperty("request_id", request_id);
jsonObject.addProperty("justification", "blablabla");
jsonObjectN.add("requests", jsonObject);
jsonObjectN.addProperty("justification", justification);
Retrofit retrofit = builder.build();
Client client = retrofit.create(Client.class);
Call<PostRequest> user = client.postRequests(jsonObjectN);

在客户端类中我有

@Headers("Content-Type: application/json")
@POST("/requests")
Call<PostRequest> postRequests(@Body JsonObject body

);

所以请求是这样的

Request{method=POST, url=https://myurl.com/v1.0/approver/requests, tags={class retrofit2.Invocation=com.loginci.rgcislogin.Client.postRequests() [{"requests":{"action":"reject","request_id":"23423423refsdsdgdg","justification":"blablabla"},"justification":"Action done by Admin"}]}}

非常接近,但我无法完全弄清楚如何以预期的确切数组/json 格式制作它? 希望有人足够了解 Android 和 jsonObject 以提供帮助。

【问题讨论】:

    标签: java json retrofit2


    【解决方案1】:

    你没有添加一个json数组请求

    试试下面的。

    Gson gson = new GsonBuilder()
        .setLenient()
        .create();
    Retrofit.Builder builder = new Retrofit.Builder()
        .baseUrl("https://myurl.com/")
        .addConverterFactory(GsonConverterFactory.create(gson));
    JsonObject jsonObject = new JsonObject();
    JsonObject jsonObjectN = new JsonObject();
    JsonArray jsonArray = new JsonArray();
    jsonObject.addProperty("action", action);
    jsonObject.addProperty("request_id", request_id);
    jsonObject.addProperty("justification", "blablabla");
    jsonArray.add(jsonObject);
    jsonObjectN.add("requests", jsonArray);
    jsonObjectN.addProperty("justification", justification);
    Retrofit retrofit = builder.build();
    Client client = retrofit.create(Client.class);
    Call<PostRequest> user = client.postRequests(jsonObjectN);
    

    【讨论】:

    • 谢谢!!我找不到如何做到这一点的例子。所以现在我在得到 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT 但是 BEGIN_ARRAY 在第 1 行第 2 列路径 $ 我假设这是在响应返回之后休息一下?我确实从邮递员那里得到了一个有效的帖子回复,并将其放入 pojo 中进行渲染,然后制作了一个课程并在回复时调用它,但我认为这一定是不对的。我知道如果 json 不正确,api 只响应 [] 如果是,那么它会响应真正的 json 响应
    猜你喜欢
    • 1970-01-01
    • 2020-10-31
    • 2022-07-25
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多