Я пытаюсь создать ответ 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
}