2011-06-10 13 views
1

我試圖用restlet創建HEAD響應。不幸的是,有一個@Get註釋,但restlet作者states,您必須使用@Get,然後比較方法。 正如documentation/specification所說,不存在主體,但只有消息頭。如何構建具有restlet的HEAD響應的消息頭

現在,如何創建一個郵件頭將被髮送到服務器,因爲下面的代碼不能正常工作,它會發送這個頭: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

你只需要實現@Get:應該首先使用HTTP GET進行處理。然後,如果你發出一個HTTP HEAD,它將被框架自動處理,沒有別的事要做在你身邊。只關注讓GET得到正確實施。

+0

嗨傑羅姆,GET工程,但不是頭。那麼我錯了什麼,只是說正確實施並不是那麼有用。我在網上搜索了很多,但沒有找到答案。爲什麼是HEAD迴應204沒有內容,內容長度:0?我的自定義標題去了哪裏? – Dag 2011-06-18 20:04:49

+0

嗨達格,看起來像一個錯誤。你能輸入一個問題嗎? http://www.restlet.org/community/issues – 2011-07-02 15:47:26