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

时间:2012-03-22 15:47:33

标签: java android rest restlet clientresource

如何将自己的标头添加到Restlet中由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()以添加一些标题?

3 个答案:

答案 0 :(得分: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>");

这对应于自定义标题。

希望它会对你有所帮助。 亨利

答案 1 :(得分:3)

如果您使用的是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();

答案 2 :(得分:0)

这对我有用,所以我要分享。

        ClientResource client = new ClientResource(uri);

        Series<Header> headerValue = new Series<>(Header.class);
        Request request = client.getRequest();
        headerValue.add("header name", "header value");
        request.getAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS, headerValue);