В Java, как установить заголовок Ответа Рестлета? - PullRequest
4 голосов
/ 17 сентября 2010

Не могу понять, как добавить заголовки к ответу рестлета. Когда я смотрю на доступные методы в объекте Response, я вижу только setStatus, setEntity и setAttributes, но ни один из них не говорит мне, как установить пользовательские заголовки http в ответе.

Например, у меня есть GET вызов, который возвращает что-то вроде следующего:

HTTP/1.1 200 OK
Content-Type: text/json
Content-Length: 123
Some-Header: the value
Some-Other-Header: another value

{
  id: 111,
  value: "some value this could be anything",
  diagnosis: {
    start: 12552255,
    end: 12552261,
    key: "ABC123E11",
    source: "S1",
  }
}

Что бы это ни было возможно. В методе handleGet я обрабатываю это так:

final MediaType textJsonType = new MediaType("text/json");

@Override
public void handleGet() {
  log.debug("Handling GET...");
  final Response res = this.getResponse();

  try {
    final MyObject doc = this.getObj("hello", 1, "ABC123E11", "S1");
    final String docStr = doc.toString();

    res.setStatus(Status.SUCCESS_OK);
    res.setEntity(docStr, textJsonType);

    // need to set Some-header, and Some-other-header here!
  }
  catch(Throwable t) {
    res.setStatus(Status.SERVER_ERROR_INTERNAL);
    res.setEntity(new TextRepresentation(t.toString()));
  }
}

1 Ответ

10 голосов
/ 17 сентября 2010

Поскольку Restlet больше относится к принципам архитектуры REST, чем к HTTP, он пытается быть независимым от протокола и не раскрывает заголовки HTTP напрямую.Однако они хранятся в атрибуте org.restlet.http.headers ответа (как Form).Обратите внимание, что таким способом можно настраивать только пользовательские заголовки, а не стандартные (они обрабатываются непосредственно платформой, например, Content-Type зависит от Representation MediaType).

См. Этопример: http://blog.arc90.com/2008/09/15/custom-http-response-headers-with-restlet/ (содержание ссылки также доступно на интернет-архиве ).

...