web-dev-qa-db-ja.com

レトロフィット:@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);

@Fieldの代わりに@Bodyを使用できますか?そうでない場合、なぜですか?そして、このケースを知る方法は@Bodyを使用し、他のケースは@Fieldを使用しますか?

いくつかのケースを説明してください、ありがとうございます。

19
Cuong Nguyen

@Body – Javaオブジェクトをリクエストボディとして送信します。

@Field –データをform-urlencodedとして送信します。これには、メソッドに添付された@FormUrlEncoded注釈が必要です。 @FieldパラメーターはPOSTでのみ機能します。 @Fieldには必須パラメーターが必要です。 @Fieldがオプションの場合、代わりに@Queryを使用して、null値を渡すことができます。

25
Fathima km

どちらもデータの投稿にのみ使用されますが、次のような違いがあります-

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

それが役立つことを願っています... :-)

23
Neo