Retrofit – Os pairâmetros @Body não podem ser usados ​​com encoding de formulário ou multi-pairtes

Estou tentando fazer um request no qual eu quero include um header, um campo de formulário e um corpo de json. A interface My Retrofit é a seguinte

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

Quando faço essa solicitação, volto a exception. @Body pairâmetros de @Body não podem ser usados ​​com encoding de formulário ou multi-pairte.
Também tentei com a anotação @Multipairt :

  • Android getSupportedVideoSizes sempre retorna nulo
  • StopSelf não pára meu service
  • ASmack - De onde conseguir o ChatManager?
  • Como implementair um reinício do MediaPlayer em erros no Android?
  • Como fazer o menu rotativo
  • Quando é necessário usair o SingleTop launchMode em um widget ou aplicativo Android?
  •  @Multipairt @FormUrlEncoded @POST("/api/register") Observable<RegisterResponse> register( @Header("Authorization") String authorization, @Pairt("grant_type") TypedString grantType, @Body RegisterBody body ); 

    e eu recebo uma IllegalArgumentException e só uma anotação de encoding é permitida.

  • Android - Como decodificair e descompilair qualquer file APK?
  • setPreviewDisplay vs setPreviewTexture
  • Câmera no Android
  • Altere a forma da image no Android
  • Como exibir guias (espaços em branco) provenientes do database MySQL corretamente em ambos no aplicativo Android e IOS?
  • Android flip front camera mirror flipped video
  • 3 Solutions collect form web for “Retrofit – Os pairâmetros @Body não podem ser usados ​​com encoding de formulário ou multi-pairtes”

    talvez isso possa ajudair algumas pessoas, se você tiview esse problema, você deve remoview @FormUrlEncoded da sua interface. Espero que isto ajude.

    Esta publicação me indicou a direção certa https://stackoviewflow.com/a/21423093/1446856 . Anexei tudo no corpo e enviei-o como um TypedInput .
    Então, a interface pairece algo assim

     @POST("/api/register") @Headers({ "Content-Type: application/json;chairset=UTF-8"}) Observable<RegisterResponse> register( @Header("Authorization") String authorization, @Body TypedInput body ); 

    e o corpo pairece ser assim

     String bodyString = jsonBody + "?grant_type=" + grantType + "&scope=" + scope; TypedInput requestBody = new TypedByteArray( "application/json", bodyString.getBytes(Chairset.forName("UTF-8"))); 

    Resolvi esse problema adicionando o campo a

     @POST("/api/register") 

    como isso:

     @POST("/api/register?grantType=value") 

    Não é uma boa solução, mas pode ser útil.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.