2012-07-20 70 views
6

我将一些java代码转换为scala,我希望能够获取特定的标题并将其作为字符串返回。scala play 2.0获取请求标题

在java中我有:

return request().getHeader("myHeader") 

我一直无法实现斯卡拉同样的事情。任何帮助将不胜感激!谢谢!

+0

http://stackoverflow.com/questions/11198998/scala-play-2-passing-request-to-method 见下文特拉维斯布朗的答复意见。 – user1253952 2012-07-22 06:15:44

回答

7

你可以写:

request.get("myHeader").orNull 

如果你想要的东西基本上是一样的你的Java线。但是你没有!

request.get("myHeader")返回一个Option[String],这是Scala鼓励您编写不会抛出空指针异常的代码的方式。

您可以用各种方式处理Option。例如,如果你想提供一个默认值:

val h: String = request.get("myHeader").getOrElse("") 

或者,如果你想要做的事与头如果存在的话:

request.foreach { h: String => doSomething(h) } 

或者只是:

request foreach doSomething 

有关更多可能性,请参阅this cheat sheet

+0

非常感谢!指出我也应该处理null/Option案例。也许我有一个更基本的问题。我收到错误“未找到:值请求”。 – user1253952 2012-07-20 19:31:44

+0

你在哪里试图使用它? – 2012-07-20 19:33:08

+0

在我的一个控制器文件中,使用了一个非常基本的方法: def getName = request.get(“myHeader”) – user1253952 2012-07-20 19:36:29

4

当我尝试了上述答案斯卡拉与playframework 2.2:

request.get("myHeader").getOrElse("") 

它给了我下面的错误:当我使用

value get is not a member of play.api.mvc.Request[play.api.mvc.AnyContent]

request.headers.get("myHeader").getOrElse("") 

这现在工作。我建议使用这个。