2015-09-18 5 views
12

मैं कच्चे शरीर के साथ नए रेट्रोफिट 2.0b1 के साथ अनुरोध पोस्ट करने के लिए कुछ रास्ता ढूंढ रहा हूं। कुछ इस तरह:रेट्रोफिट 2.0 बीटा 1: कच्चे स्ट्रिंग बॉडी को कैसे पोस्ट करें

@POST("/token") 
Observable<TokenResponse> getToken(@Body String body); 

जहां तक ​​मैं समझता हूँ, वहाँ स्ट्रेट "से-स्ट्रिंग" कनवर्टर किसी तरह का होना चाहिए, लेकिन यह अभी तक नहीं यह कैसे काम करता है मेरे लिए स्पष्ट है।

टाइप किए गए इनपुट के साथ 1.9 में ऐसा करने के तरीके थे, लेकिन यह अब 2.0 में मदद नहीं करता है।

पी एस हाँ, बैकएंड बेवकूफ के रूप में मैं देख रहा हूँ कोई भी मदद के लिए मेरे लिए यह बदल जाएगा :(

धन्यवाद है, जहाँ तक।

उत्तर

7

आप अपने Type के लिए एक कनवर्टर दर्ज की जानी चाहिए जब आप निर्माण कर रहे हैं अपने RetrofitaddConverter(type, converter) का उपयोग कर।

Converter<T> 2,0 में 1.x संस्करण में पुराने कनवर्टर का उपयोग करते हुए समान दृष्टिकोण का उपयोग करता।

आपका StringConverter थानेदार

public class StringConverter implements Converter<Object>{ 


    @Override 
    public String fromBody(ResponseBody body) throws IOException { 
     return ByteString.read(body.byteStream(), (int) body.contentLength()).utf8(); 
    } 

    @Override 
    public RequestBody toBody(Object value) { 
     return RequestBody.create(MediaType.parse("text/plain"), value.toString()); 
    } 
} 

नोट्स::

  1. ByteString Okio पुस्तकालय से है कुछ इस तरह हो uld।
  2. मन अपने MediaType
+0

मेरे पास है बस यह भी पता चला कि यह कैसे करें। धन्यवाद! –

23

रेट्रोफिट में 2.0.0-beta2 में Charset आप String डेटा का उपयोग कर सर्वर के लिए एक शरीर पोस्ट और String के रूप में सर्वर की प्रतिक्रिया शरीर से पढ़ने के लिए RequestBody और ResponseBody उपयोग कर सकते हैं।

सबसे पहले आप अपने RetrofitService में एक प्रणाली की घोषणा करने की जरूरत है:

Retrofit retrofit = new Retrofit.Builder().baseUrl("http://somedomain.com").build(); 
RetrofitService retrofitService = retrofit.create(RetrofitService.class); 

String strRequestBody = "body"; 
RequestBody requestBody = RequestBody.create(MediaType.parse("text/plain"),strRequestBody); 
Call<ResponseBody> call = retrofitService.update(requestBody); 

और अंत में एक अनुरोध बनाने के लिए और के रूप में पढ़ा प्रतिक्रिया शरीर:

interface RetrofitService { 
    @POST("path") 
    Call<ResponseBody> update(@Body RequestBody requestBody); 
} 

इसके बाद आप एक RequestBody और Call वस्तु बनाने की जरूरत String:

try { 
    Response<ResponseBody> response = call.execute(); 
    if (response.isSuccess()) { 
     String strResponseBody = response.body().string(); 
    } 
} catch (IOException e) { 
    // ... 
} 
+0

आपको बहुत बहुत धन्यवाद। अच्छा समाधान –

+0

यह वैध उत्तर होना चाहिए। –

संबंधित मुद्दे