改造:@Field和@Body之间有什么不同

时间:2017-04-11 04:56:17

标签: android post retrofit

在一些帖子请求中,我不知道何时使用@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?

你能告诉我一些情况并解释一下,谢谢你。

2 个答案:

答案 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

希望它会有所帮助......: - )