2012-11-03 35 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/