Pubblica JSON non elaborato utilizzando Retrofit 2
Ho un grande oggetto JSON ricevuto da un'altra applicazione e devo effettuare una chiamata post a un'API utilizzando Retrofit 2. Tutti gli esempi o argomenti che trovo su questo argomento utilizzano un oggetto JSON o una mappa. Ciò significa che devo analizzare la mia stringa (JSON) per creare JSONObject o Map.
Ma voglio mettere direttamente la mia corda nel corpo in qualche modo.
Ho provato in questo modo, ma non funziona:
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);
In questo modo sto inviando una stringa con escape come corpo e il mio JSON sembra strano: screenshot
Risposte
È necessario aggiungere un convertitore Scalars all'elenco delle dipendenze Gradle, che si occuperebbe di convertire gli oggetti java.lang.String in corpi di richiesta di testo/semplici, poiché Retrofit utilizza il convertitore Gson per impostazione predefinita. Controllare questo collegamento per l'ultima versione.
https://search.maven.org/search?q=g:com.squareup.retrofit2%20a:converter-scalars
dependencies {
implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
..
}
Quindi, devi passare una fabbrica di convertitori corretta al tuo costruttore di retrofit. Successivamente dirà a Retrofit come convertire il parametro @Body passato al servizio.
val retrofit = Retrofit.Builder()
.client(okHttpClient)
.baseUrl("/")
.addConverterFactory(ScalarsConverterFactory.create())
.build()
Successivamente, è il momento di impostare un servizio Retrofit con un parametro String body.
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);