2012-11-03 36 views
0

我在嘗試以下代碼來檢索自定義HTTP標頭,但每次都得到空值。有沒有人知道爲什麼它可能不工作?我搜索了高和低,但不知道爲什麼它不工作。Java Play Framework 2.0 getHeader()返回null

public static Result test() 
    { 

     String v = request().getHeader("version"); 

     System.out.println("test" + v); 

return ok("success"); 
} 

我測試過用我們的iPhone應用程序和restclient.jar也因此它似乎沒有,這個問題是不是發送標題中的客戶端的代碼。

任何幫助將不勝感激!

+0

你得到一個異常或一個空的消息? –

+0

不,只是我們分配的字符串仍然爲空 – Smalesy

回答

1

我撞了我的頭這一個小時爲好。事實證明,Play 2.0使用HTTP標頭進行一些奇怪的事情。雖然我發送了一個標題爲「Message-Sender-Uid」,但它在Play中顯示爲「MESSAGE-SENDER-UID」。由於某種原因,Play播放了大寫頭。解決方案是簡單地在標題地圖中查找標題的全部大寫版本。

如果這樣做失敗,那麼您可以隨時將所有標題打印到記錄器,以查看您的標題是否存在。

喜歡的東西

Http.Request req = Http.Context.current().request(); 
Map<String, String> headerMap = req.headers(); 
for (String headerKey : headerMap.keySet()) { 
    Logger.info("Key: " + headerKey + " - Value: " + headerMap.get(headerKey)); 
} 

在你的控制器方法應該對這項工作做得很好。

記住

import play.mvc.*; 
+0

感謝您的幫助。你非常正確,標題被大寫。我將代碼更改爲以下代碼,它的工作原理是:request()。getHeader(「VERSION」);' – Smalesy

1

您的代碼工作正常curl,進入控制檯:

curl --header "version: 1.2" localhost:9000/