2016-04-20 3 views
2

Ich mache POST-Anfrage an mein Backend, aber ich bekomme eine 400 nur mit Retrofit. Ich grub mehr in das Problem und erkannte, dass, da mein POST-Body eine einfache Zeichenfolge ist (nicht JSON), jedes Mal, wenn ich ein Anführungszeichen habe, ein Backslash dahinter steht und dann die Anfrage sendet. Hier ist der Aufruf:Senden von Nur-Text als POST-Körper verursacht Problem beim Nachrüsten

@POST("/endpoint") 
Observable<Result<MyResponse>> myApiCall(@Body String body); 

Ich habe einige Forschung und Leute vorgeschlagen, dass ich brauche eine StringConverterFactory hinzufügen, aber das half nicht (ich diesen Link gefolgt: String converter factory)

denke ich, dass Link in Retrofit github Seite ist veraltet!

+0

Versuchen Sie, POST-Daten im Format "application/x-www-form-urlencoded" zu senden? – Droidwala

+0

Nein, es ist text/plain – Gabriel

Antwort

3

die Sie interessieren ..

@POST("/endpoint") 
Observable<Result<MyResponse>> myApiCall(@Body RequestBody body); 

RequestBody body= RequestBody.create(MyRequest.create("data")); 

public abstract class StringRequestBody extends RequestBody { 

     public static RequestBody create(String content) { 
      MediaType contentType = MediaType.parse("application/plain"); 
      Charset charset = Util.UTF_8; 
      if (contentType != null) { 
       charset = contentType.charset(); 
       if (charset == null) { 
        charset = Util.UTF_8; 
        contentType = MediaType.parse(contentType + "; charset=utf-8"); 
       } 
      } 
      byte[] bytes = content.getBytes(charset); 
      return create(contentType, bytes); 
     } 

    } 
+0

Nun, ich denke, dass diese Lösung funktioniert, aber es ist wirklich nicht bequem, denn ich muss dieses RequestBody-Ding jedes Mal tun, wenn ich die API verwenden möchte! – Gabriel

+0

Warum erstellen Sie dann keinen Wrapper über RequestBody und fixieren Ihren contentType, der die Dinge vereinfachen würde. Bitte überprüfen Sie die Bearbeitung und lassen Sie mich wissen, wenn mehr Problem haben. –

+0

Ja, das sieht auch aus wie das vorherige, obwohl es vielleicht schöner aussieht. Mein Problem mit dieser Lösung besteht darin, dass ich ein RequestBody an "myApiCall" statt an einen String übergebe. Ich weiß deine Hilfe zu schätzen. – Gabriel

0

Versuchen Sie diese:

@POST ("Endpunkt") beobachtbare> myApiCall (@Body String Körper);

+0

Observable> ist das Java? –