Как создать заголовок сообщения для ответа HEAD с помощью рестлета - PullRequest
1 голос
/ 10 июня 2011

Я пытаюсь создать ответ HEAD с помощью рестлета. К сожалению, есть только аннотация @Get, но автор рестлета заявляет , что вам нужно использовать @Get, а затем сравнить метод. Как сказано в документации / спецификации 1006 *, тело не может быть, а только заголовок сообщения.

Теперь, как создать заголовок сообщения, которое будет отправлено на сервер, поскольку следующий код не работает, он отправляет следующие заголовки: HTTP / 1.1 204 Нет содержимого, Длина содержимого: 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 Ответ

2 голосов
/ 11 июня 2011

Вам просто нужно реализовать @Get по-настоящему: сначала нужно работать с HTTP GET.Затем, если вы выдадите HTTP HEAD, он будет автоматически обработан платформой, с вашей стороны больше ничего не нужно делать.Просто сконцентрируйтесь на правильной реализации GET.

...