在某些帖子请求中,我不知道何时使用@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);
希望它会有所帮助... :-(