Publier du JSON brut à l'aide de Retrofit 2
J'ai un gros objet JSON reçu d'une autre application et je dois faire un appel post à une API en utilisant Retrofit 2. Tous les exemples ou sujets que je trouve sur ce sujet utilisent un JSONObject ou une Map. Cela signifie que je dois analyser ma chaîne (JSON) afin de créer le JSONObject ou Map.
Mais j'ai envie de mettre directement mon string dans le corps en quelque sorte.
J'ai essayé de cette façon, mais cela ne fonctionne pas:
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);
De cette façon, j'envoie une chaîne qui est échappée en tant que corps et mon JSON semble étrange : capture d'écran
Réponses
Vous devez ajouter un convertisseur Scalars à la liste de vos dépendances Gradle, qui se chargerait de convertir les objets java.lang.String en corps de requête text/plain, car Retrofit utilise le convertisseur Gson par défaut. Consultez ce lien pour la dernière version.
https://search.maven.org/search?q=g:com.squareup.retrofit2%20a:converter-scalars
dependencies {
implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
..
}
Ensuite, vous devez transmettre une usine de conversion correcte à votre constructeur Retrofit. Il indiquera plus tard à Retrofit comment convertir le paramètre @Body passé au service.
val retrofit = Retrofit.Builder()
.client(okHttpClient)
.baseUrl("/")
.addConverterFactory(ScalarsConverterFactory.create())
.build()
Après cela, il est temps de configurer un service Retrofit avec un paramètre de corps de chaîne.
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);