gpt4 book ai didi

android - Retrofit2:使用正文与查询

转载 作者:搜寻专家 更新时间:2023-11-01 07:44:34 25 4
gpt4 key购买 nike

我有一个名为 change 的网络服务方法。我将 UpdateStatusRequest 对象发送到定义如下的网络服务:

public class UpdateStatusRequest {

private String Status;

public UpdateStatusRequest(String status) {
Status = status;
}
public String getStatus() {
return Status;
}
}

当我使用以下 API 减速时:

@POST("StatusUpdate")
Call<Status> change(@Query("Status") String status);

然后调用 statusApi.change(request.getStatus()),效果很好。当我将 Ready 作为状态传递时,它将调用 http://server-url/StatusUpdate?Status=Ready

但是使用下面的声明

@POST("StatusUpdate")
Call<Status> change(@Body UpdateStatusRequest status);

然后调用statusApi.change(request),它会调用http://server-url/StatusUpdate并发送Status请求正文。这将导致 404 状态代码和错误提示 Not Found

我想知道我的第二次调用有什么问题(因为我认为 @Body 的行为类似于 bundle 在同一个对象中的多个 @Query 参数)?

最佳答案

在改造中,@Body@Query 不同。

  • @Body – 将 Java 对象作为请求正文发送。
  • @Query - 附加到 URL 的查询参数。null 值将被忽略。

但是 @Field 几乎类似于 @Body 标签。

  • @Field – 以 form-urlencoded 形式发送数据。 @Field 参数仅适用于 POST

例如:

@POST("StatusUpdate")
Call<Status> change(@Field("Status") String Status);

But in your case, Your server is expecting the params to be passed in the URL(@Query).

希望这个解释有所帮助。

关于android - Retrofit2:使用正文与查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47392832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com