Retrofit 2'yi kullanarak ham JSON yayınlayın

Aug 17 2020

Başka bir uygulamadan aldığım büyük bir JSON nesnem var ve Retrofit 2'yi kullanarak bir API'ye bir posta çağrısı yapmam gerekiyor. Bu konuda bulduğum tüm örnekler veya konular bir JSONObject veya bir Harita kullanıyor. Bu, JSONObject veya Map'i oluşturmak için dizimi (JSON) ayrıştırmam gerektiği anlamına gelir.

Ama ben bir şekilde doğrudan bedenime ipimi sokmak istiyorum.

Bu şekilde denedim ama işe yaramıyor:

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

Bu şekilde gövde olarak kaçan bir dize gönderiyorum ve JSON'm garip görünüyor: ekran görüntüsü

Yanıtlar

1 Nemanja Aug 17 2020 at 22:07

Gradle bağımlılıkları listesine, java.lang.String nesnelerini metin / düz istek gövdelerine dönüştürmekle ilgilenecek bir Scalars Converter eklemeniz gerekir, çünkü Retrofit varsayılan olarak Gson dönüştürücüyü kullanır. En son sürüm için bu bağlantıyı kontrol edin.

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

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

Ardından, Retrofit oluşturucunuza doğru bir dönüştürücü fabrikası iletmeniz gerekir. Daha sonra Retrofit'e hizmete iletilen @ Body parametresinin nasıl dönüştürüleceğini söyleyecektir.

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

Bundan sonra, String body parametresine sahip bir Retrofit servisi kurma zamanıdır.

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