2012-03-22 96 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();