在Restlet中添加由ClientResource包装的请求

tac*_*cos 6 java rest android restlet clientresource

如何将自己的标题添加到ClientResourceRestlet 包装的请求中?例如,我已经读过您在直接使用时可以使用以下内容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");
Run Code Online (Sandbox Code Playgroud)

但是,我基本上遵循他们的教程中提供的代码,我不知道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."); }
Run Code Online (Sandbox Code Playgroud)

如何修改retrieve()以添加一些标题?

Thi*_*ier 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>");
Run Code Online (Sandbox Code Playgroud)

请注意,默认情况下,大多数标头都由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>");
Run Code Online (Sandbox Code Playgroud)

这对应于自定义标头.

希望它会对你有所帮助.蒂埃里

  • 使用版本2.1.2:Series <Header> headers =(Series <Header>)res.getRequestAttributes().get("org.restlet.http.headers"); if(headers == null){headers = new Series <Header>(Header.class); } headers.add("user","abcd1"); headers.add("password","welcome"); (4认同)