2010-09-17 4 views
4

Я не могу понять, как добавить заголовки в ответ на мой ответ. Когда я просматриваю доступные методы в объекте 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())); 
    } 
} 
+2

Просто интересно, почему вы переопределяете 'handleGet' в своем' ресурсе'. В Restlet 1.1 вы, вероятно, захотите вместо этого использовать 'представлять' (и пусть' handleGet' выполняет свою логику (включая такие вещи, как согласование типа содержимого, насколько я помню), в Restlet 2 вы, вероятно, захотите переопределить 'get()' в 'ServerResource' или использовать аннотацию' @ Get'. – Bruno

+0

@Bruno Кажется, что каждый пример, который я вижу в Интернете, делает это по-другому. Я продолжу и начну использовать 'представлять' вместо handleGet Но вы знаете, как я буду обрабатывать 'PUT' и' DELETE'? –

+2

В Restlet 1.1 это 'storeRepresentation' для PUT и' removeRepresentation' для DELETE (см. [Первый учебник по ресурсам] (http: // www .restlet.org/documentation/1.1/firstResource # part01)). Вы могли бы также использовать Restlet 2 в настоящее время (в этом случае это 'put (Representation)' и 'delete()', или вы можете использовать '@ Put' и '@ Delete'). – Bruno

ответ

10

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

См. Это на примере: http://blog.arc90.com/2008/09/15/custom-http-response-headers-with-restlet/ (контент ссылки также можно получить у Internet Archive Wayback Machine).

+0

Ссылка не работает. Уточните ответ: –

+1

@E _net4, я добавил еще одну ссылку. – Bruno

+0

Обе ссылки не работают, не могли бы вы привести пример в свой ответ? Спасибо – Henrique

Смежные вопросы