Publicar JSON sin formato con Retrofit 2
Tengo un objeto JSON grande recibido de otra aplicación y tengo que hacer una llamada posterior a una API usando Retrofit 2. Todos los ejemplos o temas que encuentro sobre este tema usan un JSONObject o un Mapa. Eso significa que tengo que analizar mi cadena (JSON) para crear el JSONObject o Map.
Pero quiero poner directamente mi cuerda en el cuerpo de alguna manera.
Lo intenté de esta manera, pero no funciona:
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);
De esta manera, estoy enviando una cadena que se escapa como un cuerpo y mi JSON se ve extraño: captura de pantalla
Respuestas
Debe agregar un convertidor escalar a la lista de sus dependencias de Gradle, que se encargaría de convertir objetos java.lang.String en cuerpos de solicitud de texto/simple, porque Retrofit usa el convertidor Gson de manera predeterminada. Consulte este enlace para obtener la última versión.
https://search.maven.org/search?q=g:com.squareup.retrofit2%20a:converter-scalars
dependencies {
implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
..
}
Luego, debe pasar una fábrica de convertidores correcta a su constructor Retrofit. Más tarde le dirá a Retrofit cómo convertir el parámetro @Body pasado al servicio.
val retrofit = Retrofit.Builder()
.client(okHttpClient)
.baseUrl("/")
.addConverterFactory(ScalarsConverterFactory.create())
.build()
Después de esto, es hora de configurar un servicio de actualización con un parámetro de cuerpo de cadena.
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);