【问题标题】:Add headers to request wrapped by ClientResource in Restlet向 Restlet 中的 ClientResource 包装的请求添加标头
【发布时间】:2012-03-22 15:47:33
【问题描述】:

如何在 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() 以添加一些标题?

【问题讨论】:

    标签: java android rest restlet clientresource


    【解决方案1】:

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

    这对应于自定义标题。

    希望对您有所帮助。 蒂埃里

    【讨论】:

    • 我收到以下代码错误:类型不匹配:无法从对象转换为系列
    • 使用 2.1.2 版:Series
      headers = (Series
      ) res.getRequestAttributes().get("org.restlet.http.headers"); if (headers == null) { headers = new Series
      (Header.class); } headers.add("user", "abcd1"); headers.add("密码", "欢迎");
    • @thierry-templier 很抱歉加入这个对话,但你能帮我解决这个问题吗stackoverflow.com/questions/35383763/…
    【解决方案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();
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-22
        • 2012-01-30
        • 2016-04-10
        • 1970-01-01
        • 2017-12-27
        • 2013-10-28
        • 1970-01-01
        相关资源
        最近更新 更多