Publicar JSON bruto usando o Retrofit 2
Tenho um grande objeto JSON recebido de outro aplicativo e tenho que fazer uma pós-chamada para uma API usando o Retrofit 2. Todos os exemplos ou tópicos que encontro neste tópico usam um JSONObject ou um Map. Isso significa que tenho que analisar minha string (JSON) para criar o JSONObject ou Map.
Mas eu quero colocar diretamente minha corda no corpo de alguma forma.
Eu tentei desta forma, mas não funcionou:
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);
Dessa forma, estou enviando uma string com escape como um corpo e meu JSON parece estranho: captura de tela
Respostas
Você precisa adicionar um Scalars Converter à lista de suas dependências Gradle, que cuidaria da conversão de objetos java.lang.String em corpos de solicitação text/plain, porque o Retrofit usa o conversor Gson por padrão. Verifique este link para a versão mais recente.
https://search.maven.org/search?q=g:com.squareup.retrofit2%20a:converter-scalars
dependencies {
implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
..
}
Em seguida, você precisa passar uma fábrica de conversores correta para sua construtora Retrofit. Posteriormente, ele informará ao Retrofit como converter o parâmetro @Body passado para o serviço.
val retrofit = Retrofit.Builder()
.client(okHttpClient)
.baseUrl("/")
.addConverterFactory(ScalarsConverterFactory.create())
.build()
Depois disso, é hora de configurar um serviço de Retrofit com um parâmetro de corpo String.
@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);