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

Cuo*_*yen 20 post android retrofit

在一些帖子请求中,我不知道何时使用@Field,何时使用@Body.像什么是区别:

@POST("users/register")
    Call<String> register(@Body RequestBody registerRequest);
Run Code Online (Sandbox Code Playgroud)

和:

@POST("users/register")
    Call<String> register(@Field String id, @Field String pass);
Run Code Online (Sandbox Code Playgroud)

我可以使用@Body而不是@Field来反转吗?如果没有,为什么?如何知道这个案例使用@Body,其他案例使用@Field?

能否请你给我一些案例并解释一下,谢谢.

Fat*_* km 28

@Body - 将Java对象作为请求体发送.

@Field - 以form-urlencoded方式发送数据.这需要@FormUrlEncoded使用方法附加注释.该@Field参数仅适用于POST.@Field需要一个强制参数.如果@Field是可选的,我们可以@Query改为使用并传递空值.

  • 我想知道为什么?以及如何知道在某些情况下使用@Body,在其他情况下使用@Field? (3认同)
  • 不.如果正在使用@ Body,它应该是唯一的参数,不能与@FormUrlEncode或@MultiPart结合使用. (2认同)

Neo*_*Neo 25

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

@Body注释定义了一个请求体.

    interface Foo {
       @POST("/jayson")
       FooResponse postJson(@Body FooRequest body);
    }
Run Code Online (Sandbox Code Playgroud)

这意味着如果您使用@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);
Run Code Online (Sandbox Code Playgroud)

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