我正在尝试以下代码来检索自定义HTTP标头但每次都得到null。有没有人知道它为什么不起作用?我搜索过高低,但无法弄清楚它为什么不起作用。
public static Result test()
{
String v = request().getHeader("version");
System.out.println("test" + v);
return ok("success");
}
我已经使用我们的iPhone应用程序和restclient.jar测试了代码,所以似乎问题不是客户端没有发送标头。
任何帮助将不胜感激!
答案 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.*;