Retrofit - @Body parameters cannot be used with form or multi-part encoding

Chris picture Chris · Dec 5, 2014 · Viewed 61.7k times · Source

I m trying to make a request in which I want to include a Header , a form-urlencoded field and a json body. My Retrofit interface is as follows

@FormUrlEncoded
@POST("/api/register")
Observable<RegisterResponse> register(
    @Header("Authorization") String authorization, 
    @Field("grant_type") String grantType, 
    @Body RegisterBody body
);

When I make this request I get back exception @Body parameters cannot be used with form or multi-part encoding.
I have also tried with the @Multipart annotation:

@Multipart
@FormUrlEncoded
@POST("/api/register")
Observable<RegisterResponse> register(
    @Header("Authorization") String authorization, 
    @Part("grant_type") TypedString grantType, 
    @Body RegisterBody body
);

and I get an IllegalArgumentException and only one encoding annotation is allowed.

Answer

Julien Athomas picture Julien Athomas · Apr 19, 2016

maybe this could help some people, if you have this trouble, you should remove @FormUrlEncoded of your interface. Hope this helps.