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



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

你能给我一些案例并解释一下吗,谢谢。

@Body – 将 Java 对象作为请求正文发送。

@Field – 以表单编码的形式发送数据。这需要随方法附加@FormUrlEncoded注释。@Field参数仅适用于开机自检。 @Field需要一个必需的参数。在 @Field 是可选的情况下,我们可以改用@Query并传递一个 null 值。

两者都仅用于发布数据,但它们有以下区别 -

@Body注释定义单个请求正文。

    interface Foo {
       @POST("/jayson")
       FooResponse postJson(@Body FooRequest body);
    }

这意味着如果您使用的是@Body,它应该只是参数。当您已经有一个 JsonObject 并且希望通过 api 调用将其作为它发送时,这很有帮助。

另一种方法是,您可以使用@Field发送数据并将 Place 对象作为 JSON 字符串发送。

    @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);

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

最新更新