在一些帖子请求中,我不知道何时使用@Field,何时使用@Body。 像什么是区别:
@POST("users/register")
Call<String> register(@Body RequestBody registerRequest);
和
@POST("users/register")
Call<String> register(@Field String id, @Field String pass);
我可以使用@Body而不是@Field来反转吗?如果没有,为什么?如何知道这个案例使用@Body,其他案例使用@Field?
你能告诉我一些情况并解释一下,谢谢你。
答案 0 :(得分:20)
@Body
- 将Java对象作为请求体发送。
@Field
- 以form-urlencoded方式发送数据。这需要使用方法附加@FormUrlEncoded
注释。
@Field
参数仅适用于POST。 @Field
需要强制参数。如果@Field
是可选的,我们可以使用@Query
代替并传递空值。
答案 1 :(得分:18)
两者仅用于发布数据,但它们有以下差异 -
@Body注释定义了一个请求体。
@POST("/post/addphoto/")
public void addImage(@Field("image_url") String url, @Field("caption") String caption, @Field("google_place_id") String placeId, @Field("facebook_place") String place, Callback<UploadCallBack> response);
这意味着如果您使用@Body,它应该只是参数。当你已经有一个JsonObject并且想要通过api调用发送它时,它会很有用。
另一种方法是,您可以使用@Field发送数据并将Place对象作为JSON字符串发送。
$ ls | sort --field-separator = --key 2 -h | xargs -rn 10 cat > All_Traces.bin
希望它会有所帮助......: - )