0

我正在尝试使用以下代码来检索自定义 HTTP 标头,但每次都为空。有谁知道为什么它可能不起作用?我搜索了高低,但无法弄清楚为什么它不起作用。

public static Result test() 
    {

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

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

return ok("success");
}

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

任何帮助将不胜感激!

4

2 回答 2

1

您的代码适用于curl,请在控制台中输入:

curl --header "version: 1.2" localhost:9000/
于 2012-11-03T21:09:49.507 回答
1

我也用头撞了几个小时。事实证明,Play 2.0 使用大写 HTTP 标头做了一些奇怪的事情。尽管我以“Message-Sender-Uid”的形式发送了一个标头,但它在 Play 中显示为“MESSAGE-SENDER-UID”。出于某种原因,Play 将整个标题大写。解决方案是在标题映射中简单地查找标题的全大写版本。

如果这失败了,那么您总是可以将所有标题打印到 Logger 以查看您的标题是否存在。

就像是

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.*;
于 2012-11-08T00:50:51.210 回答