रिट्रोफिट 2 का उपयोग करके कच्चे JSON पोस्ट करें

Aug 17 2020

मेरे पास एक अन्य एप्लिकेशन से प्राप्त एक बड़ी JSON ऑब्जेक्ट है और मुझे रेट्रोफ़िट का उपयोग करके एक एपीआई पर एक पोस्ट कॉल करना है। इस विषय पर मुझे मिलने वाले सभी उदाहरण या विषय JSONObject या मैप का उपयोग करते हैं। इसका मतलब है कि मुझे JSONObject या मैप बनाने के लिए अपने स्ट्रिंग (JSON) को पार्स करना होगा।

लेकिन मैं किसी भी तरह सीधे शरीर में अपनी स्ट्रिंग डालना चाहता हूं।

मैंने इस तरह से कोशिश की, लेकिन यह काम नहीं करता है:

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

इस तरह मैं एक स्ट्रिंग भेज रहा हूं जो एक शरीर के रूप में बच गई है और मेरा JSON अजीब लगता है: स्क्रीनशॉट

जवाब

1 Nemanja Aug 17 2020 at 22:07

आपको अपने ग्रेडल निर्भरताओं की सूची में एक स्लैसर कन्वर्टर जोड़ने की जरूरत है, जो कि java.lang.tring.String ऑब्जेक्ट्स को टेक्स्ट / प्लेन रिक्वेस्ट बॉडीज़ में कनवर्ट करने का ध्यान रखेगा, बीकॉस्ट रिट्रोफिट डिफ़ॉल्ट रूप से Gson कनवर्टर का उपयोग करता है। नवीनतम संस्करण के लिए इस लिंक की जाँच करें।

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

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

फिर, आपको अपने रेट्रोफिट बिल्डर को एक सही कनवर्टर फैक्टरी पास करने की आवश्यकता है। यह बाद में रेट्रोफ़िट को बताएगा कि सेवा में पारित @ बॉडी पैरामीटर को कैसे परिवर्तित किया जाए।

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

इसके बाद, यह स्ट्रिंग शरीर पैरामीटर के साथ एक रेट्रोफिट सेवा स्थापित करने का समय है।

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