2011-05-15 14 views
20

मैं RestTemplate.postForObject का उपयोग कर वेब सेवा पर जानकारी पोस्ट कर रहा हूं। परिणाम स्ट्रिंग के अलावा मुझे प्रतिक्रिया शीर्षलेख में जानकारी चाहिए। क्या यह पाने का कोई तरीका है?मैं RestTemplate से प्रतिक्रिया शीर्षलेख कैसे पढ़ूं?

RestTemplate template = new RestTemplate(); 
String result = template.postForObject(url, request, String.class); 

उत्तर

36

ठीक है, मैंने अंततः इसे समझ लिया। एक्सचेंज विधि बिल्कुल वही है जो मुझे चाहिए। यह एक HttpEntity देता है जिसमें पूर्ण शीर्षलेख होते हैं।

RestTemplate template = new RestTemplate(); 
HttpEntity<String> response = template.exchange(url, HttpMethod.POST, request, String.class); 

String resultString = response.getBody(); 
HttpHeaders headers = response.getHeaders(); 
+2

यदि आपको स्थिति की आवश्यकता है: ResponseEntity प्रतिक्रिया = template.exchange (...); response.getStatusCode(); – olafure

+2

आप 'postForEntity' भी कह सकते थे, जो थोड़ा आसान तरीका है। – ayahuasca

+0

मेरे साथ एकमात्र समस्या यह है कि टेम्पलेट.एक्सचेंज विधि आपके लिए HttpMessageConverterExtractor बनाने के लिए restTemplate.getMessageConverters() का उपयोग करती है। यह हो सकता है कि आप जो चाहें हो या न हो। ज्यादातर मामलों के लिए आप इसका उपयोग करना चाहते हैं और वसंत-एमवीसी-सर्वलेट.एक्सएमएल में अपना संदेश कन्वर्टर्स सेट अप करना चाहते हैं। – gaoagong

1

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

7

execute विधि का उपयोग करने के लिए सबसे अच्छा काम करना होगा और ResponseExtractor में पास होना होगा जिसमें शीर्षलेख तक पहुंच होगी।

private static class StringFromHeadersExtractor implements ResponseExtractor<String> { 

    public String extractData(ClientHttpResponse response) throws 
    { 
     return doSomthingWithHeader(response.getHeaders()); 
    } 
} 

एक अन्य विकल्प (कम स्वच्छ) RestTemplate का विस्तार करने और doExecute करने के लिए कॉल को ओवरराइड और वहाँ किसी विशेष हैडर से निपटने तर्क जोड़ना है।

+0

+1, लेकिन शायद बेहतर मौजूदा 'HttpMessageConverterExtractor' और ओवरराइड का विस्तार करने के बजाय एक नया एक लिखें। – skaffman

+0

निष्पादन अनुरोध पैराबैक को इसके पैरामीटर में से एक के रूप में चाहता है। मुझे अनुरोध निकाय को शामिल करने के लिए इसे कार्यान्वित करने के तरीके के कहीं भी एक उदाहरण नहीं मिल रहा है। postForObject बस एक HttpEntity लेता है, किसी भी विचार? –

0
HttpEntity<?> entity = new HttpEntity<>(postObject, headers); // for request 
    HttpEntity<String> response = template.exchange(url, HttpMethod.POST, entity, String.class); 
    String result= response.getBody(); 
    HttpHeaders headers = response.getHeaders(); 
संबंधित मुद्दे