โพสต์ JSON ดิบโดยใช้ชุดติดตั้งเพิ่ม 2

Aug 17 2020

ฉันมีออบเจ็กต์ JSON ขนาดใหญ่ที่ได้รับจากแอปพลิเคชันอื่นและฉันต้องทำการโพสต์เรียก API โดยใช้ Retrofit 2 ตัวอย่างหรือหัวข้อทั้งหมดที่ฉันพบในหัวข้อนี้ใช้ JSONObject หรือ Map นั่นหมายความว่าฉันต้องแยกวิเคราะห์สตริงของฉัน (JSON) เพื่อสร้าง JSONObject หรือ Map

แต่ฉันต้องการใส่สายอักขระของฉันโดยตรงในร่างกายอย่างใด

ฉันลองวิธีนี้แล้ว แต่ไม่ได้ผล:

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

ด้วยวิธีนี้ฉันกำลังส่งสตริงที่ถูก Escape เป็น body และ JSON ของฉันดูแปลก ๆ : screenshot

คำตอบ

1 Nemanja Aug 17 2020 at 22:07

คุณต้องเพิ่ม Scalars Converter ในรายการ Gradle dependencies ของคุณซึ่งจะดูแลการแปลง java.lang.String ออบเจ็กต์เป็นข้อความ / เนื้อหาคำขอธรรมดาเนื่องจาก Retrofit ใช้ตัวแปลง Gson ตามค่าเริ่มต้น ตรวจสอบลิงค์นี้เพื่อดูเวอร์ชันล่าสุด

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

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

จากนั้นคุณต้องส่งโรงงานแปลงที่ถูกต้องไปยังผู้สร้างชุดติดตั้งเพิ่มเติม หลังจากนั้นจะบอก Retrofit ถึงวิธีการแปลงพารามิเตอร์ @Body ที่ส่งผ่านไปยังบริการ

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

หลังจากนี้ก็ถึงเวลาตั้งค่าบริการ Retrofit ด้วยพารามิเตอร์ String body

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