ここでこの質問を投稿する前に、インターフェイスメソッドの上に_@Multipart
_を追加しようとしました。
この場合、TypedFile
を使用して画像をサーバーに送信しようとします。私のインターフェイスメソッドは次のようになります。
_ @Headers({"Content-type: application/json"})
@POST("/user/change")
void postChange(@Query("name") String name, @Query("email") String email, @Query("password") String password, @Query("phone") String phone, @Query("user_id") String userId, @Query("address[]") String[] listAddress, @Query("head[]") String[] head, @Part("photo_profile") TypedFile photoProfile, @Body TypedInput jsonObject, Callback<ReceiveDTO> callback);
_
[〜#〜]編集[〜#〜]
そのメソッドでは、_@Part
_および_@Body
_を確認できます。メソッドの上に_@Multipart
_を追加すると、エラーがスローされます@Body parameters cannot be used with form or multi-part encoding. (parameter #9)
私はRetrofit 1.9を使用しています
同じ問題が発生する場合は、@ POST/@ PUTの上に@Multipartアノテーションを追加してください。私は同じエラーがあり、私の問題はその注釈が欠けていたことだけでした
@ QueryはGet
リクエストでのみ使用し、実際には@ QueryURLの最後にパラメータを追加します。 Document の例を参照してください。
ユーザープロファイルをサーバーに送信する必要がある場合は、MultiPart
を使用します。
マルチパートパーツはRetrofitのコンバーターの1つを使用するか、RequestBodyを実装して独自のシリアル化を処理できます。
たとえば、次のコードでは、説明付きのプロフィール写真をサーバーに送信できます。
@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);
@Partでさらに属性を追加することもできます。完全な例 here を参照してください。どのようにしてこれを行うかを段階的に説明しました。
Edit:JackWarthonが説明するように here 、The@ Bodyアノテーションは、単一のリクエスト本文を定義します。
interface Foo {
@POST("/jayson")
FooResponse postJson(@Body FooRequest body);
}