Я не могу понять, как добавить заголовки в ответ на мой ответ. Когда я просматриваю доступные методы в объекте Response
, все, что я вижу, это setStatus
, setEntity
и setAttributes
, но ни один из них не говорит мне, как настроить пользовательские заголовки HTTP на ответ.В Java, как установить заголовок ответа Restlet?
К примеру, у меня есть 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()));
}
}
Просто интересно, почему вы переопределяете 'handleGet' в своем' ресурсе'. В Restlet 1.1 вы, вероятно, захотите вместо этого использовать 'представлять' (и пусть' handleGet' выполняет свою логику (включая такие вещи, как согласование типа содержимого, насколько я помню), в Restlet 2 вы, вероятно, захотите переопределить 'get()' в 'ServerResource' или использовать аннотацию' @ Get'. – Bruno
@Bruno Кажется, что каждый пример, который я вижу в Интернете, делает это по-другому. Я продолжу и начну использовать 'представлять' вместо handleGet Но вы знаете, как я буду обрабатывать 'PUT' и' DELETE'? –
В Restlet 1.1 это 'storeRepresentation' для PUT и' removeRepresentation' для DELETE (см. [Первый учебник по ресурсам] (http: // www .restlet.org/documentation/1.1/firstResource # part01)). Вы могли бы также использовать Restlet 2 в настоящее время (в этом случае это 'put (Representation)' и 'delete()', или вы можете использовать '@ Put' и '@ Delete'). – Bruno