如何在改造中使用原始 json 对象调用改造 @DELETE 方法?

Posted

技术标签:

【中文标题】如何在改造中使用原始 json 对象调用改造 @DELETE 方法?【英文标题】:How to Call Retrofit @DELETE method using raw json object in retrofit? 【发布时间】:2020-01-31 10:05:04 【问题描述】:

我尝试使用原始 json 对象删除 Retrofit 方法来删​​除我的列表项。我曾经将 POST 方法与 raw 方法一起使用,但我需要与 @DELETE 方法相同。这里发布方法代码:

@Headers("Content-Type:application/json")
@POST("api/tracking/post")
Call<MyResponse> getUser(@Body JsonObject jsonBody);

我需要这种类型的 DELETE 方法和带有这种类型 url 的原始对象

api/tracking/delete/user_id

我试试

@Headers("Content-Type:application/json")
@DELETE("api/tracking/delete/user_id")
Call<MyResponse> getUser(@Body JsonObject jsonBody);

我把我的json


"store_id":"oddeve78",
"user_id":1,
"api_token":"nzBxRT9lr2T0WDnd1DAA8Z6uXZRJQt3OyNkP6rfqCl8kEvNeyM7KoHvkqHU0

【问题讨论】:

问题是你没有从方法参数中传递Path 参数。在@DELETE 注释的getUser 方法中添加变量@Path("user_id) String/int userId 但我不需要@Path 参数,我使用的是原始 json obj。我可以在同一个 API 中添加 raw 和 Params 吗? 使用api/tracking/delete/user_id,你实际上是在使用Path 是的,你可以。另请注意:当您声明像 @DELETE("api/tracking/delete/user_id") 这样的 API 路径时,您需要在方法参数中提供来自 Path 参数的 user_id。 我没有使用它,但我需要这种类型的 URL @Mahdi-Malv 【参考方案1】:

你可以创建一个函数来为你打包。如果你真的想传递JsonObject。

public Call<MyResponse> getUserByUserId(JSONObject json) 
   String userId = json.get("user_id");
   if (userId == null) return null;
   return getUser(userId);

你的电话:

@Headers("Content-Type:application/json")
@DELETE("api/tracking/delete/user_id")
Call<MyResponse> getUser(@Path("user_id) String userId);

【讨论】:

以上是关于如何在改造中使用原始 json 对象调用改造 @DELETE 方法?的主要内容,如果未能解决你的问题,请参考以下文章

改造 - 获取原始非 JSON 数组

改造 JSON 反序列化对象的 $ref 对其原始副本的引用

如何在 Android 的改造请求中传递 JSON 对象并检索 JSON 对象?

如何使用android studio中的改造服务在请求中传递json

如何使用改造获得没有对象键的 JSON 数组

改造 2 POST JSON 对象,响应给出错误代码 400,消息 = nul