โพสต์ JSON ดิบโดยใช้ชุดติดตั้งเพิ่ม 2
ฉันมีออบเจ็กต์ 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
คำตอบ
คุณต้องเพิ่ม 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);