いくつかの投稿リクエストでは、@ 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を使用しますか?
いくつかのケースを説明してください、ありがとうございます。
@Body
– Javaオブジェクトをリクエストボディとして送信します。
@Field
–データをform-urlencodedとして送信します。これには、メソッドに添付された@FormUrlEncoded
注釈が必要です。 @Field
パラメーターはPOSTでのみ機能します。 @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);
それが役立つことを願っています... :-)