2012-03-22 14 views
6

में क्लाइंट रिसोर्स द्वारा लिपटे अनुरोध के लिए हेडर जोड़ें, मैं रीसेट में ClientResource द्वारा लिपटे अनुरोध में अपने हेडर कैसे जोड़ूं? उदाहरण के लिए, मैंने पढ़ा है कि आप निम्नलिखित जब Client साथ प्रत्यक्ष रूप से कार्य का उपयोग कर सकते हैं:रीस्टलेट

Form headers = (Form) request.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS); 
if (headers == null) { 
headers = new Form(); 
request.getAttributes().put("org.restlet.http.headers", responseHeaders); 
} 
headers.add("X-Some-Header", "the value"); 

हालांकि, मैं मूल रूप से उनके ट्यूटोरियल में प्रदान किए गए कोड का पालन कर रहा हूँ और मैं नहीं जानता कि ClientResource का कौन सा सदस्य एक्सेस किया जाना चाहिए हेडर स्थापित करने के लिए:

ClientResource clientResource = new ClientResource("http://webserviceurl"); 

MyClassResource classResource = clientResource.wrap(classResource.class); 

MyClass class; 

try { class = resource.retrieve(); } catch (Exception e) { System.out.println("fail."); } 

क्या मैं कुछ हेडर जोड़ने के लिए retrieve() संशोधित करने के लिए कर सकते हैं?

उत्तर

13

क्लाइंट रिसोर्स विधि में getRequestAttributes विधि है जो getRequest().getAttributes() के लिए शॉर्टकट है।

तो आप के रूप में नीचे वर्णित है, अनुरोध के लिए अपने कस्टम हेडर निर्दिष्ट करने के लिए आदेश में इसका इस्तेमाल कर सकते हैं:

ClientResource cr = new ClientResource("..."); 
Series<Header> headers = cr.getRequestAttributes().get(
           "org.restlet.http.headers"); 
headers.set("<header-name>", "<header-value>"); 

जानते हैं कि हेडर के सबसे Restlet द्वारा डिफ़ॉल्ट रूप से प्रबंधित कर रहे हैं हो सकता है। यह देखने के लिए कि कौन से हेडर समर्थित हैं, शीर्षलेख उपयोग कक्षा: https://github.com/restlet/restlet-framework-java/blob/master/modules/org.restlet/src/org/restlet/engine/header/HeaderUtils.java पर एक नज़र डालें।

संपादित

Restlet के नवीनतम संस्करण (2.3) के साथ

, एक विधि getHeaders जोड़ा गया है:

ClientResource cr = new ClientResource("..."); 
Series<Header> headers = cr.getHeaders(); 
headers.set("<header-name>", "<header-value>"); 

यह कस्टम हेडर से मेल खाती है।

आशा है कि यह आपकी मदद करेगा। थियरी

+0

मैं इस कोड के साथ पालन कर रहा हूँ त्रुटि मिलती है ।: ऑब्जेक्ट से सीरीज

ademar111190

+4

को परिवर्तित नहीं कर सकते संस्करण 2.1.2 के साथ: सीरीज

हेडर = (सीरीज
) res.getRequestAttributes() मिल ("org.restlet.http.headers"); यदि (हेडर == शून्य) { शीर्षलेख = नई श्रृंखला
(हेडर.क्लास); } headers.add ("उपयोगकर्ता", "abcd1"); हेडर.एड ("पासवर्ड", "स्वागत है"); –

+0

@ thierry-templier इस वार्तालाप में इंजेक्ट करने के लिए खेद है, लेकिन क्या आप इस http://stackoverflow.com/questions/35383763/how-to-get-mediatype-from-request पर मेरी सहायता कर सकते हैं – xybrek

2

आप restlet 2.0.x (नवीनतम स्थिर संस्करण) का उपयोग कर रहे हैं, तो आप ऐसा करने की जरूरत: प्रकार बेमेल:

ClientResource resource = new ClientResource(yourUrl); 
Form headers = (Form)resource.getRequestAttributes().get("org.restlet.http.headers"); 
if (headers == null) { 
    headers = new Form(); 
    resource.getRequestAttributes().put("org.restlet.http.headers", headers); 
} 
headers.add("yourHeaderName", yourHeaderValue); 
resource.get(); 
Response response = resource.getResponse(); 
String text = response.getEntity().getText(); 
String status = response.getStatus().toString(); 
संबंधित मुद्दे