Posting JSON mentah menggunakan Retrofit 2

Aug 17 2020

Saya memiliki objek JSON besar yang diterima dari aplikasi lain dan saya harus membuat panggilan pos ke API menggunakan Retrofit 2. Semua contoh atau topik yang saya temukan pada topik ini menggunakan JSONObject atau Peta. Itu berarti saya harus mengurai string saya (JSON) untuk membuat JSONObject atau Map.

Tapi entah bagaimana aku ingin langsung memasukkan senar saya ke dalam tubuh.

Saya mencoba cara ini, tetapi tidak berhasil:

@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);

Dengan cara ini saya mengirim string yang lolos sebagai tubuh dan JSON saya terlihat aneh: tangkapan layar

Jawaban

1 Nemanja Aug 17 2020 at 22:07

Anda perlu menambahkan Scalars Converter ke daftar dependensi Gradle Anda, yang akan menangani konversi objek java.lang.String menjadi teks / badan permintaan biasa, karena Retrofit menggunakan konverter Gson secara default. Periksa tautan ini untuk versi terbaru.

https://search.maven.org/search?q=g:com.squareup.retrofit2%20a:converter-scalars

dependencies {
    implementation “com.squareup.retrofit2:converter-scalars:2.4.0”
    ..
}

Kemudian, Anda harus meneruskan pabrik konverter yang benar ke pembuat Retrofit Anda. Nanti akan memberi tahu Retrofit cara mengonversi parameter @Body yang diteruskan ke layanan.

val retrofit = Retrofit.Builder()
        .client(okHttpClient)
        .baseUrl("/")
        .addConverterFactory(ScalarsConverterFactory.create())
        .build()

Setelah ini, saatnya menyiapkan layanan Retrofit dengan parameter tubuh String.

@Headers("Content-Type: application/json")
@POST("transactions")
Call<Void> submitTransaction(@Body String body);