ग्रोवी रीस्ट क्लाइंट में एक POST अनुरोध से प्रतिक्रिया में डेटा गुम है

मैं POST अनुरोध करने के लिए groovy RESTClient 0.6 का उपयोग कर रहा हूं। मैं प्रतिक्रिया में एक एक्सएमएल पेलोड की उम्मीद है। मेरे पास निम्न कोड है:

def restclient = new RESTClient('')
def headers= ["Content-Type": "application/xml"]
def body= getClass().getResource("/new_resource.xml").text
/*
 If I omit the closure from the following line of code
 RESTClient blows up with an NPE..BUG?
*/
def response = restclient.post(
                            path:'/myresource', headers:headers, body:body){it}
 println response.status //prints correct response code
 println response.headers['Content-Length']//prints 225
 println response.data //Always null?!

प्रतिक्रिया.data हमेशा शून्य है, भले ही मैं Google क्रोम के पोस्टमैन क्लाइंट का उपयोग करके एक ही अनुरोध का प्रयास करता हूं, फिर भी मुझे अपेक्षित प्रतिक्रिया निकाय वापस मिल जाता है। क्या यह RESTClient के साथ एक ज्ञात मुद्दा है?

0
@dmahapatro RESTClient.post विधि अंतिम तर्क के रूप में बंद करने को स्वीकार करता है। आप बंद करने में प्रतिक्रिया को संभालने के लिए अपने कोड में भेज सकते हैं। दिलचस्प बात यह है कि यदि आप बंद विधि को स्वीकार करने वाली पोस्ट विधि के ओवरलोड का उपयोग नहीं करते हैं, तो पोस्ट विधि बस उड़ाती है। :-(
जोड़ा लेखक The Governor, स्रोत
POST अनुरोध जारी करते समय {it} क्या है?
जोड़ा लेखक dmahapatro, स्रोत

1 उत्तर

HTTP बिल्डर दस्तावेज़ का कहना है कि डेटा में पार्स किए गए प्रतिक्रिया सामग्री को शामिल किया जाना चाहिए, लेकिन जैसा कि आपने पाया है, यह नहीं है। हालांकि, आप पाठक ऑब्जेक्ट से पार्सड प्रतिक्रिया सामग्री प्राप्त कर सकते हैं। ऐसा करने का सबसे आसान, सबसे सुसंगत तरीका यह है कि आप अपनी RESTClient ऑब्जेक्ट पर डिफ़ॉल्ट सफलता और विफलता बंद करने के लिए सेट करें:

def restClient = new RESTClient()
restClient.handler.failure = { resp, reader ->
    [response:resp, reader:reader]
}
restClient.handler.success = { resp, reader ->
    [response:resp, reader:reader]
}

आपको सफलता और असफलता पर एक ही चीज़ मिल जाएगी: प्रतिक्रिया वाला एक मानचित्र (जो HttpResponseDecorator का उदाहरण है) और पाठक (जिस प्रकार का प्रतिक्रिया प्रतिक्रिया निकाय की सामग्री द्वारा निर्धारित किया जाएगा )।

इसके बाद आप इस प्रकार प्रतिक्रिया और पाठक तक पहुंच सकते हैं:

def map = restClientAdapter.get([:])//or POST, OPTIONS, etc.
def response = map['response']
def reader = map['reader']

assert response.status == 200
0
जोड़ा