如何在改造中使用原始 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 反序列化对象的 $ref 对其原始副本的引用
如何在 Android 的改造请求中传递 JSON 对象并检索 JSON 对象?