2017-04-11 27 views
3

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

你可以請給我一些情況並解釋,謝謝。

回答

6

@Body - 將Java對象作爲請求主體發送。

@Field - 以表單形式發送數據 - urlencoded。這需要在方法中附加一個@FormUrlEncoded註釋。 @Field參數僅適用於POST。 @Field需要一個強制參數。在@Field是可選的情況下,我們可以使用@Query來代替並傳遞空值。

+0

謝謝你,但我仍然混淆約可以使用的肉體,並現場和反向? –

+2

否。如果正在使用@ Body,它應該是唯一的參數,它不能與@FormUrlEncode或@ MultiPart組合。 –

+0

我想知道爲什麼?以及如何在某些情況下使用@ Body,在其他情況下使用@ Field? –

5

兩者都僅用於發佈數據,但是它們具有以下差異 -

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

希望這將有助於... :-)

相關問題