如何使用restlet构造HEAD响应的消息头

时间:2011-06-10 08:28:43

标签: restlet restlet-2.0

我正在尝试使用restlet创建HEAD响应。不幸的是,有一个@Get注释,但是重定时作者states,您必须使用@Get,然后比较方法。 正如documentation/specification所说,没有正文,只有一个邮件标题。

现在如何创建将发送到服务器的消息头,因为以下代码不起作用,它发送此头:HTTP / 1.1 204 No Content,Content-Length:0

protected void addResponseHeader(String name, String value) {
    Form responseHeaders = (Form)getResponse().getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
    if (responseHeaders == null) {
        responseHeaders = new Form();
        getResponse().getAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS, responseHeaders);
    }
    responseHeaders.add(new Parameter(name, value));
}

服务器端的具体代码:

@Get
public void execute() {
    if (Method.HEAD.equals(getMethod())) {
        //optional: getResponse().getEntity().setMediaType(MediaType.TEXT_PLAIN);
        getResponse().setStatus(Status.SUCCESS_OK, "hello head");
        addResponseHeader("X-my-header", "value");
    }
}

客户端代码:

@Test
public void head() {
    Request request = new Request(Method.HEAD, url);
    Response response = query(request);
    assertEquals(Status.SUCCESS_OK, response.getStatus());
    Form form = (Form)response.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
    assertEquals("value", form.getFirstValue("X-my-value")); // does fail because it is null
}

1 个答案:

答案 0 :(得分:2)

你只需要实现@Get:首先应该使用HTTP GET。然后,如果您发出HTTP HEAD,它将由框架自动处理,您无需执行任何其他操作。只需专注于正确实施GET。