Java Play Framework 2.0 getHeader()返回null

时间:2012-11-03 19:49:56

标签: java rest playframework playframework-2.0

我正在尝试以下代码来检索自定义HTTP标头但每次都得到null。有没有人知道它为什么不起作用?我搜索过高低,但无法弄清楚它为什么不起作用。

public static Result test() 
    {

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

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

return ok("success");
}

我已经使用我们的iPhone应用程序和restclient.jar测试了代码,所以似乎问题不是客户端没有发送标头。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您的代码可以正常使用curl,在您的控制台中输入:

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

答案 1 :(得分: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.*;