2012-03-22 102 views
6

如何將我自己的標頭添加到Restlet中由ClientResource包裝的請求中?例如,我讀過您可以直接與Client工作時使用以下命令:向Restlet中的ClientResource包裝的請求添加標頭

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

ClientResource方法有一個getRequestAttributes方法,該方法是快捷方式:getRequest().getAttributes()

所以,你可以使用它,以指定您的自定義標題的要求,如下所述:

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

要知道,大多數頭被管理的Restlet默認。要查看哪些頭文件受支持,請查看HeaderUtils類: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 2012-05-22 21:51:18

+4

使用版本2.1.2: 系列

標題=(系列
)res.getRequestAttributes()。get(「org.restlet.http.headers」); if(headers == null){ headers = new Series
(Header.class); } headers.add(「user」,「abcd1」); headers.add(「password」,「welcome」); – 2013-05-30 18:13:34

+0

@ thierry-templier對不起,注入到這個對話中,但你能幫我解決這個問題嗎?http://stackoverflow.com/questions/35383763/how-to-get-mediatype-from-request – xybrek 2016-02-15 03:41:00

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();